我正在尝试实现 printf
,我想知道 printf
如何舍入浮点数,因为我找不到一般规则
例如,如果输入 => printf("|%.f| |%.1f| |%.2f| |%.5f| |%.12f", 0.000099, 0.000099, 0.000099, 0.000099, 0.000099);
这是输出 => |0| |0.0| |0.00| |0.00010| |0.000099000000
我使用 IEEE-754 中的方法,所以我们在内存中的浮点数是:0.000098999999999999994037755413067714016506215557456016540527343750
我的问题是我应该何时以及如何舍入浮点数?
我正在寻找所有浮点数都必须遵循的一般规则。
最佳答案
不确定这是否正是 printf
的做法,但这似乎适用于您的示例:
您的解释有缺陷:您的 C 编译器正在将您的常量向上转换为 double 。所以它没有使用 0.0000989999....
它使用了更准确的 double 等价物。
试试这个:
printf("|%.f| |%.1f| |%.2f| |%.5f| |%.12f", (float)0.000099, (float)0.000099, (float)0.000099, (float)0.000099, (float)0.000099);
输出:
关于c - C 中的 printf 如何舍入浮点数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56546110/