在转换时遇到问题:(int)

时间:2011-11-07 16:19:21

标签: c

我有2个x和y双打。当我划分x / y时,我得不到我希望得到的结果。

这是我在c中使用的printf命令以及我得到的输出:

命令:

printf("%3.10f %3.2f %3.12f %d\n",x,y,x/y,(int)(x/y));

输出:

1.0000000000 0.10 10.000000000000 9

对我来说,x / y应该是10,所以不确定为什么(int)(x / y)产生9而不是10。

有人可以帮我理解这个问题吗?

3 个答案:

答案 0 :(得分:4)

x/y结果略小于10(肯定小于10 ^ -12 off,否则其他结果不会显示为10.000000000000),可能是由于通常的浮点数学舍入错误。< / p>

printf执行舍入到所请求精度的数字,但转换为int是一个残酷的截断,因此,即使它是9.99999999999999 ...结果你得到9。 / p>

答案 1 :(得分:3)

这是因为您要截断小数部分。围绕它,你应该没事。

printf("%3.10f %3.2f %3.12f %d\n",x,y,x/y,round(x/y));

答案 2 :(得分:1)

cast to int不会将double舍入到最接近的整数。

查看round() for float in C++了解详情