2012-05-13 90 views

回答

1

%d截断你的价值这就是为什么你会得到8

浮点表示二进制系统近似意味着,在9.0的显示值是内部小于9,因此截断下来8.

例如所有这些产量3.

In [19]: i = 3.1 
In [20]: print '%d' %i 
3 

In [21]: i = 3.4 
In [22]: print '%d' %i 
3 

In [23]: i = 3.7 
In [24]: print '%d' %i 
3 

In [25]: i = 3.9999 
In [26]: print '%d' %i 
3 

This Wikipeadia本文提供这样的我有关浮点表示的其他背景。

5

浮点算术本质上是不精确的。在Python中,计算通常以双精度执行。你的数字不能精确表示为双精度,因此会受到舍入误差。在我的机器上,result8.9999999999999929

>>> result = (((1.7526 % 0.3048)/0.3048) * 12) 
>>> result 
8.9999999999999929 
>>> print result 
9.0 
>>> int(result) 
8 

打印时它被四舍五入为9.0值,而是存储在result不到9.0实际值。因此,当您将result转换为整数时,它会被截断为8

关键问题是值的可表示性。在Python解释器中很容易看到1.75260.3048都不能精确表示为双精度。

>>> 1.7526 
1.7525999999999999 
>>> 0.3048 
0.30480000000000002 

故事的寓意在于,当使用浮点值时,您不应该期待精确的算术。这个主题的开创性讨论是:What Every Computer Scientist Should Know About Floating-Point Arithmetic