整数赋值中的舍入误差

时间:2012-04-26 07:14:38

标签: c floating-point printf rounding scanf

你如何解释这里发生的舍入?我认为将浮点值赋给Int总是会导致小数后的值丢失?

int z=39.99999999999999999999999;
printf("%d",z); // gives 40

由于

2 个答案:

答案 0 :(得分:6)

你不能有足够精确的双倍来容纳所有那些9。

>>> '%.15f' % 39.9999999999999
'39.999999999999901'
>>> '%.15f' % 39.99999999999999
'39.999999999999993'
>>> '%.15f' % 39.999999999999999
'40.000000000000000'

答案 1 :(得分:-1)

正如你所说:C浮动到整数转换会截断(丢弃)小数部分。

您使用的是哪种编译器?我认为该分配不是在运行时完成的,它可能是编译器问题。

参考:comp.lang.c FAQ list