我有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。
有人可以帮我理解这个问题吗?
答案 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++了解详情