浮点型小数点后都有6位小数吗

来源:百度知道 编辑:UC知道 时间:2024/06/16 22:03:31
1浮点型小数点后都有6位小数吗?
float i=23.56;
printf("%f\n",i);
这个程序输出得23.559999,为什么会这样呢

计算机中,浮点形变量是用二进制记录的,而不是十进制
也就是说,在内存中,十进制浮点23.56被记录成了二进制科学计数法2^4*(1.01111000111……)2

(111)2表示二进制数111

由于23.56无法用二进制表示成有限小数,而计算机只可能记录有限的位数,因此记录的时候不可避免会有一定误差
输出的时候,再由二进制转换为十进制,就会出现上面的结果了

至于输出了小数点后6位,这与所输出的数本身的精度无关,纯粹是printf函数在没有指定输出精度的时候默认的
假如你想输出到小数点后3位,可以这样:
printf("%.3f\n",i);
这样就会输出成23.560