我正在尝试实现 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/

10-11 18:06