以下代码:
float numberForFactorial;
float floatingPart = 1.400000;
int integralPart = 1;
numberForFactorial = ((floatingPart) - (float)integralPart) * 10;
printf("%d", (int)numberForFactorial);
返回3而不是4。你能解释一下为什么吗?
最佳答案
最接近float
的1.400000
略小于1.4
。你可以通过做
printf("%0.8hf\n", floatingPart);
ideone的结果是
1.39999998
。这意味着小数点后第一个数字的10倍是3
。若要避免此问题,请使用舍入而不是截断。一种简单的取整方法是在截断前加一半:
printf("%d", (int)(numberForFactorial + 0.5f));
将按预期打印
4
。您也可以使用round
、rint
、lround
或modf
获得相同的结果:https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html。舍入是一个复杂的主题,因此请选择约束与您的情况最匹配的方法。关于c - 如何在ANSI C中乘以浮点数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39235075/