2017-02-14 78 views
1

我有含有大量浮點數的變量,說a = 999999999999999.99如何將大浮點值轉換爲int?

當我在解釋輸入int(a),它返回1000000000000000。 如何獲得像這樣的長號碼的999999999999999輸出?

+2

'999999999999999.99 is 1000000000000000.0' – jonrsharpe

回答

7

999999999999999.99是一個無法用浮點格式精確表示的數字,因此Python會妥協並選擇可表示的最接近的值。在這種情況下,這恰好是1000000000000000.這就是爲什麼將其轉換爲一個整數爲1000000000000000.

如果您需要更多精度比浮動可以提供,請考慮使用decimal.Decimal

>>> import decimal 
>>> a = decimal.Decimal("999999999999999.99") 
>>> a 
Decimal('999999999999999.99') 
>>> int(a) 
999999999999999 
+0

變量'''a'''已經用問題中提到的值定義。該代碼已經包含一行'''a = 999999999999999.99'''。在你的代碼中,你正在'''decimal.Decimal()'''中聲明''''''的值。所以基本上,我需要從'''a'''獲取值並打印出來。 –

+0

我傳遞給'decimal.Decimal'的值與問題中賦給'a'的值不同。我的值是一個字符串文字。這對保持精確度是必要的。如果你做'a = decimal.Decimal(999999999999999.99)',那麼'a'將會是'Decimal('1000000000000000')'。 – Kevin

+0

如何將它轉換成字符串然後使用'''decimal.Decimal(string)'''? ''''''''已經被聲明爲浮點類型。 –

3

問題不是int,問題是浮點值本身。您的值需要17位精度才能正確表示,而雙精度浮點值具有15至16位精度。因此,當您輸入它時,它會四捨五入到最接近的可表示浮點值,即1000000000000000.0。當調用int時,它不能做一件事 - 精度已經失去。

如果您需要完全表示這種類型的值,則可以使用decimal數據類型,請記住,與常規浮點數相比,性能會受到影響。