【发布时间】:2021-04-26 18:32:18
【问题描述】:
我需要将浮点数打印为固定数量的字符。这用于严格基于文本的数据协议(是的,我知道)。十进制包含在字符数中。忽略空终止符。没有最小填充要求。十进制精度可以是 0 到(缓冲区大小 - 2),而最大实数可以是 0 到缓冲区大小。最小和最大值钳制以防止真正超出范围的数字在此问题的外部处理。
假设缓冲区大小为 6 且强制最小值和最大值为(0.0001 和 999999)的示例:
| Original | Buffer (6 chars) | Notes |
|---|---|---|
| 12445.11897784 | 12445 | Only the 5 digts are kept as there is no room for decimal + value |
| 8846.51548 | 8846.5 | |
| 4.54631888315 | 4.5463 | |
| 7651 | 7651 | |
| 0.87457 | .87457 | 0.8746 would also be acceptable |
起初我认为 sprintf 和 %.6G 似乎可以工作,直到我意识到它没有将小数点作为字符考虑在内。我的理解不完整吗?
是否有任何 C++17 或更低版本的实用程序可以用来完成上述操作。我也愿意考虑将或已经成为高于 c++17 版本标准的一部分的库。
【问题讨论】:
-
Is my understanding incomplete?你的理解是什么? -
考虑
snprintf。 -
Is there any utilities in C++17您是在寻找实用程序还是想解决您的问题? -
{fmt} 现在越来越流行
标签: c++ formatting c++17