浮点数中没有 8.7 或 1.3 这样的数字。有数字 10、数字 -6.5 和数字 0.96044921875……但没有 8.7 或 1.3。
您的计算机最多可以将 8.7 舍入到最接近的浮点数,也可以将 1.3 舍入到最接近的浮点数。计算机将这些四舍五入的数字相加,然后将结果四舍五入。
不要使用浮点数来赚钱。
#include <stdio.h>
int main(int argc, char *argv[])
{
float a = 8.7, b = 1.3;
printf("Looks like: %.1f + %.1f = %.1f\n", a, b, a+b);
printf("The truth: %.20f + %.20f = %.20f\n", a, b, a+b);
return 0;
}
在 x86 GCC/Linux 计算机上,我得到了结果:
看起来像:8.7 + 1.3 = 10.0
真相:8.69999980926513671875 + 1.29999995231628417969 = 9.99999976158142089844
在 PPC GCC/OS X 计算机上,我得到了结果:
看起来像:8.7 + 1.3 = 10.0
真相:8.69999980926513671875 + 1.29999995231628417969 = 10.00000000000000000000
请注意,在这种特殊情况下,8.7 和 1.3 是如何向下舍入的。如果您选择四舍五入的数字,您可能会在右侧看到大于 10 的数字。
请参阅 What Every Computer Scientist Should Know About Floating-Point Arithmetic,作者 David Goldberg (link)。