#include <stdio.h>
int main()
{
printf("%.2g %.2f\n", 2.925, 2.925);
}
Run Code Online (Sandbox Code Playgroud)
我认为正确的输出应该是:
2.93 2.93
Run Code Online (Sandbox Code Playgroud)
现在,输出如下:
2.9 2.92
Run Code Online (Sandbox Code Playgroud)
有两个误解:
为什么 '%.2g' 不显示点后的两位数?
为什么四舍五入?
printf转换规范中的精度字段对于f和g转换是不同的。来自标准(C17 草案,7.21.6 格式化输入/输出函数):
- 一个可选精度,给出 d、i、o、u、x 和 X 转换出现的最小位数,a、A、e、E、f 的小数点字符后出现的位数, 和 F 转换, g 和 G 转换的最大有效位数, ...
因此f,精度仅指定小数点后的位数,而精度g则是所有位数的最大位数。
在源代码中使用浮点数时,需要在编译时将其从十进制形式转换为二进制形式。十进制数2.925不能以您double类型的有限精度完全转换为二进制形式,并且值略小 ( 2.92499999999999982236...)。当四舍五入为 2 个十进制数字时,最接近的值为2.92。
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |