【发布时间】:2021-07-18 11:47:56
【问题描述】:
我希望使用sprintf 来格式化一些浮点值,但我似乎无法正确格式化。
我试过“%1.6f”作为格式字符串,但这不是我想要的。
带有有效数字的“g”说明符似乎对我需要填充的其他情况也没有帮助。
"1.6f"
Actual output: 1.000000
Expected Output: 1
"g"
Actual output: 1.1
Expected Output: 1.100000
【问题讨论】:
-
对我来说(由于浮点数在计算机上的工作方式),
1和1.000传达不同的信息:1完全是1毫无疑问;1.0001到 3dp 附近的某个数字,但不完全是1。现在加上Is floating point math broken?,得到一个整数的机会就很小了。获得所需内容的最佳机会是打印到缓冲区并检查内容,将缓冲区修改为所需的表示形式。 -
您想要
"%g"格式说明符... -
@RichardCritten "获得整数的机会非常小" --> 不算小,40% 以上的
float是整数。 -
@chux-ReinstateMonica 假设 32 位整数和浮点数。那么任何小于 1 或大于 2^32 的浮点数都不能有整数表示,我认为这远大于所有浮点数的 40%。
标签: c++ floating-point format-specifiers