提问人:user3363546 提问时间:3/25/2023 最后编辑:user3363546 更新时间:3/25/2023 访问量:75
浮点到整数除法可以提高精度,但不明白为什么 [duplicate]
Floating-point to integer division increases the precision but don't understand why [duplicate]
问:
我正在浏览一个 C 应用程序代码,发现整数除法的浮点数提高了精度,我不明白为什么。 例如,将浮点数 12926.0 除以整数 100 应该得到 129.26,但我得到的结果却是 129.259995
下面是实际代码的简单代码表示形式。
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i=12926;
float k=0.0;
k=(float) i / 100;
printf("k <%f>\n",k);
}
我已经搜索了解释并尝试在 GDB 中调试时评估值和表达式 -
(gdb) print 12926.0 / 100.0
$39 = 129.25999999999999
(gdb) print (float) i / 100
$40 = 129.259995
(gdb) print i / 100
$41 = 129
困惑于为什么 C 将结果显示为 129.259995 而不是 129.26。有没有办法控制精度长度以获得 129.26 的结果?
答:
1赞
Harith
3/25/2023
#1
来自 的手册页:printf()
f、F double 参数四舍五入并转换为十进制 样式为 [-]ddd.ddd 的表示法,其中 小数点字符后的数字等于 精密规格。如果缺少精度,则 取 6;如果精度显式为零,则否 出现小数点字符。如果小数点 出现时,至少有一个数字出现在它之前。
有没有办法控制精度长度得到 129.26 作为 结果?
是,指定精度:
printf("k <%.2f>\n",k);
评论
0赞
user3363546
3/25/2023
谢谢哈里斯,这确实回答了我的第二个问题。但是,如果未指定精度,为什么结果是 129.259995 而不是 129.260000?
0赞
Harith
3/25/2023
请参阅重复的答案。
评论
k=(float) i / 100
float
12926.0 / 100.0
double
float
float
double
i / 100
float
129.26
float
.