为什么C中的%f在输出中增加了3个随机数?

Isa*_*kin -1 c

#include <stdio.h>
void main() {
    float num = 546.327;
    printf("the number is %f\n",num);
    enter code here

}
Run Code Online (Sandbox Code Playgroud)

输出为546.327026.当我尝试不同的数字时,它总是在点后打印6个数字,而后3个是随机的.

Ale*_*aut 5

浮点数以1/2 ^ N的分数的总和存储

所以:第一个小数位是0.5,第二个是0.25,第三个是0.125等

因此,他们的表示形式并不精确......所以,如果546.327无法表示总和1/2 ^ N的分数,它将近似于某个接近的...这就是为什么你得到"随机数字",它们根本不是随机的,这只是一个舍入不准确.

如果您尝试打印另一个可以用1/2 ^ N的总和精确表示的数字,您将得到确切的数字.即546.5,546.75等