在項目實踐中,程式設計師經常會收到產品經理保留指定位數小數的需求。
在Python語言中,我們通常會使用內置函數round來完成這個功能,保留指定位數的小數。
round的用法非常簡單。例如:
那麼,這個函數是否就是一個完美的解決方案呢?答案是否定的,round這個函數存在這樣幾個缺點。
1,round有時候無法正確地四捨五入。
實際上round這個函數的捨入的原則是:四捨六入五平分。
"五平分"就是出現5時,是進位加一還是捨去基本是一半一半的。
2,round會自動捨去末尾的0.
有沒有什麼方法能夠規避以上缺點呢?可以試試這個方法。
from decimal import Decimal,ROUND_HALF_UP
def smart_round(x,n):
return str(Decimal(x).quantize(Decimal("0."+"0"*n),rounding=ROUND_HALF_UP))
這個函數能夠很好地解決四捨五入和末尾為0的這兩個問題。
注意的是,為了規避末尾為0的問題,這個函數的返回值是一個str類型。
其輸入參數可以是float類型或者str類型,但推薦使用str類型。
根據四捨五入原則保留指定位數小數的方法,你get到了嗎?😋😋
在看和分享,也是一種讚賞❤️