0

C程序浮点f = 123.456;为什么内存中的f是“123.456001”。

#include<stdio.h>
main()
{
    float f = 123.456;
    printf("%f**%10.2f**%.3f\n", f, f, f);
    printf("%f**%e**%g**\n", f, f, f);
}

123.456001

为什么 0.000001 ?

4

2 回答 2

4

二进制展开

123.456

1111011.0111010010111100011010100111111011111001110111...

计算机将其四舍五入为

1111011.01110100101111001

这是实际存储在内存中的数字。

这个数字的十进制扩展是

123.45600128173828125...

它被四舍五入到

123.456001
于 2013-05-28T14:07:42.113 回答
1

并非每个数字都可以由计算机精确表示,这需要无限的内存。所以浮点数被四舍五入到最接近的可表示数字。

于 2013-05-28T14:01:36.777 回答