以下代码:

    float numberForFactorial;
    float floatingPart = 1.400000;
    int integralPart = 1;

    numberForFactorial = ((floatingPart) - (float)integralPart) * 10;

    printf("%d", (int)numberForFactorial);

返回3而不是4。你能解释一下为什么吗?

最佳答案

最接近float1.400000略小于1.4。你可以通过做

printf("%0.8hf\n", floatingPart);

ideone的结果是1.39999998。这意味着小数点后第一个数字的10倍是3
若要避免此问题,请使用舍入而不是截断。一种简单的取整方法是在截断前加一半:
printf("%d", (int)(numberForFactorial + 0.5f));

将按预期打印4。您也可以使用roundrintlroundmodf获得相同的结果:https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html。舍入是一个复杂的主题,因此请选择约束与您的情况最匹配的方法。

关于c - 如何在ANSI C中乘以浮点数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39235075/

10-11 19:42