C语言%f输出负数

float x=-789.124;
printf(“%f”,x);
x=-789.124023
这是怎么计算的?
他这个结果为什么最后是023?

-798.124换航为二进制形式的值是:
-1100011111.111000000100000110001001001101110100101111

因为机器内部必须使用二进制方式存储,而且精度有限,这样去除了超过的位数后(去除时要四舍五入),结果与原始值就有差异了,所以浮点数多数都是不准确的。

具体到本数末尾为什么是023,这要看所使用的类型精度的小数点位数,位数不同结果也可能会不同,因为从不同的位置截断。

0.5转换为二进制是0.1,这样的数是能精确表示了,它不会乱。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-25
浮点数都是有精度问题的,就算你设 x=0 ,用%f打印出来结果会是零点几,系统认为一个数足够小的时候就是0了. 如果很在意,可以把 %f 改为 %7.3f , 以限定所要的显示位数

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网