首頁 >後端開發 >Python教學 >如何在 Python 中可靠地保留浮點數中的兩位小數?

如何在 Python 中可靠地保留浮點數中的兩位小數?

Patricia Arquette
Patricia Arquette原創
2024-12-25 19:25:13835瀏覽

How Can I Reliably Preserve Two Decimal Places in Floating-Point Numbers in Python?

在浮點數中保留兩個小數點

使用浮點數時,通常希望將它們限制為特定值小數位數。但是,僅使用 round() 函數可能會導致意外結果,如以下行為所示:

>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999

出現這種情況是因為浮點數在準確表示所有數字方面存在限制。記憶體中儲存的值並不總是與顯示的值相同。

理解浮點精度

Python 中使用的雙精度浮點數大約有16 位元精度。這意味著像 13.95 這樣的數字以類似於以下的方式表示:

125650429603636838/(2**53)

應用 round() 函數時,結果仍然是相同的浮點值,內部表示具有相同的限制。

>>> 125650429603636838/(2**53)
13.949999999999999

限制小數點的替代方法

如果只顯示兩位小數是必要的,請考慮以下替代方案:

  • 使用整數和縮放:以分而不是美元表示值並除以100進行轉換。
  • 使用定點十進位:利用十進位等模組來儲存和操作具有指定精確度的定點數。

範例:

>>> a = 13.946
>>> print("%.2f" % a)
13.95
>>> print("{:.2f}".format(a))
13.95

# Using decimal module
>>> import decimal
>>> a = decimal.Decimal('13.946')
>>> a.quantize(decimal.Decimal('.01'))
Decimal('13.95')

以上是如何在 Python 中可靠地保留浮點數中的兩位小數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn