做這題的直覺反應可能是直接用內建函數 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 這事,依然得特別拉出來處理