#42311: python 可以導入 decimal 處理浮點數精度問題


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 不指定學校
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2024-11-21 19:18:13
d561. 被秒殺的四捨五入 -- jack1 | From: [123.192.228.253] | 發表日期 : 2024-09-28 12:00

做這題的直覺反應可能是直接用內建函數 round() 處理四捨五入

或是格式化輸出 f'{num: .2f}'

 

你的思路是正確的,這些確實都能幫你處理浮點數的四捨五入,沒意外都能得到正確解答

恩...沒意外的話......

 

然而浮點數有精度問題,在一些特殊條件下,無法得到正確結果,例如這題:
0.995 -> 0.99
0.495 -> 0.49

很明顯就不對勁,因為浮點數精度在搞,詳情可以查閱官方文檔的說明,解釋得相當清楚(連結點我)

對機器來說 0.1 + 0.1 + 0.1 不等於 0.3

 

你可能會想要直接用 if 處理這些特殊狀況,但其實 python 有提供更優雅的的方式

直接導入 decimal 即可,這是一個 python 的內建模組,專門用來處理浮點數精度的,可以解決很大一部分浮點數精度的需求

import decimal

num = decimal.Decimal('0.995')
print(f'{num: .2f}')

# 1.00

 

至於 -0.00 應表示為 0.00 這事,依然得特別拉出來處理

 

 
ZeroJudge Forum