2015-11-25 47 views
0

我想將浮點數添加到整數值,但結果數字被截斷爲2個小數點。 這裏是例如:浮點在窗口上截斷爲2位python中的數字

1234567890打印+ 0.123

輸出:1234567890.12

相同的代碼是在Python工作正常殼

12345678901 + 0.123

12345678901.123 

如果整數值的長度小於10,那麼我會得到預期的編號。

打印123456789.123

輸出:123456789.123

+1

如果您關心輸出的外觀,請使用字符串格式,而不是直接「打印」值(它會隱式轉換爲「str」)。在Python 2.7中,'float .__ str__'方法使用12位重要的十進制數字將內部二進制表示轉換爲十進制數,這就是您在這裏看到的。 –

回答

1

計算在這兩種情況下是相同的,但所用的表示是不同的。考慮下面的例子與Python2(2.7.10):

>>> a = 1234567890 + .123 
>>> a 
1234567890.123 
>>> print a 
1234567890.12 
>>> str(a) 
'1234567890.12' 
>>> repr(a) 
'1234567890.123' 

當Python殼打印在它計算表達式的結果,發出的repr()用於結果的結果。與通常的print相反,str()被稱爲任何不是字符串的輸入值。 Python文檔說:

與再版(對象)不同的是,STR(對象)並不總是試圖返回一個字符串,它是可以接受的eval();其目標是返回一個可打印的字符串。

因此,問題的結果是:爲什麼str()打印的數字更少,以及它是否對您的任務很重要。

正如@MarkDickinson所提示的那樣,Python2中的str()打印最多12位十進制數字(尾隨0的切割)。然而,Python3(3.4.3)行爲不同 - 對於相同的值:

>>> a = 1234567890 + .123 
>>> a 
1234567890.123 
>>> print(a) 
1234567890.123 

所不同的是Python3默認浮子格式是,它搜索最短十進制表示,當轉換回浮動,給出恰好相同的價值。由於a == float("1234567890.123"),不再打印數字。這種差異可以更加鮮明表現在以下經典的例子:

Python2:

>>> v = 0.1 + 0.2 
>>> v 
0.30000000000000004 
>>> print v 
0.3 
>>> print 0.30000000000000004 
0.3 
>>> print 0.3000000000004 
0.3 
>>> print 0.300000000004 
0.300000000004 

Python3:

>>> v = 0.1 + 0.2 
>>> v 
0.30000000000000004 
>>> print(v) 
0.30000000000000004 

所以,Python2停止打印有問題的數字前,但Python3不。

一個明確的格式化請求改變了這兩個Python主要版本的邏輯:'%g'和'%f'在小數點後有6位數的默認值,如果沒有覆蓋,並且沒有切換到指數格式。 (同樣,不會打印尾部零。)這種情況實際上是從C標準複製的,該格式打印被Python庫模擬。