gpt4 book ai didi

c - C中的printf如何对 float 进行舍入?

转载 作者:太空狗 更新时间:2023-10-29 16:00:13 25 4
gpt4 key购买 nike

我正在尝试实现 printf,我想知道 printf 如何舍入 float ,因为我找不到通用规则

如果例如输入 => 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 的方法,所以我们在内存中的 float 是:0.000098999999999999994037755413067714016506215557456016540527343750

我的问题是我应该何时以及如何舍入我的 float ?

我正在寻找所有 float 必须遵循的一般规则。

最佳答案

不确定 printf 是否正是这样做的,但这似乎适用于您的示例:

Add 5/(10^(number of decimal points+1). Then truncate.

您的解释有缺陷:您的 C 编译器正在将您的常量向上转换为 double 。所以它没有使用 0.0000989999.... 它使用的是更准确的双等价物。

试试这个:

 printf("|%.f| |%.1f| |%.2f| |%.5f| |%.12f", (float)0.000099, (float)0.000099, (float)0.000099, (float)0.000099, (float)0.000099);

输出:

|0| |0.0| |0.00| |0.00010| |0.000098999997

关于c - C中的printf如何对 float 进行舍入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56546110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com