2012-05-13 88 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