問題
對浮點數(shù)執(zhí)行指定精度的舍入運算。
解決方案
對于簡單的舍入運算,使用內(nèi)置的 round(value, ndigits) 函數(shù)即可。比如:
print(round(1.23, 1))
print(round(1.27, 1))
print(round(-1.27, 1))
print(round(3.1415, 3))
1.2
1.3
-1.3
3.142
傳給 round() 函數(shù)的 ndigits 參數(shù)可以是負(fù)數(shù),這種情況下, 舍入運算會作用在十位、百位、千位等上面。比如:
print(round(1627731, -1))
print(round(1627731, -2))
print(round(1627731, -3))
1627730
1627700
1628000
討論
不要將舍入和格式化輸出搞混淆了。 如果只是簡單的輸出一定寬度的數(shù),則不需要使用 round() 函數(shù)。 只需要使用format()函數(shù)進(jìn)行格式化并指定精度。比如:
x = 3.1415926
print(format(x, '0.2f'))
print(format(x, '0.3f'))
print('value is {:0.4f}'.format(x))
3.14
3.142
value is 3.1416
同樣,不要試著去舍入浮點值來“修正”表面上看起來正確的問題。比如,你可能傾向于這樣做:
a = 2.1
b = 4.2
c = a + b
print(c)
6.300000000000001
print(round(c, 2))
6.3
盡管浮點數(shù)在計算的時候會有一點點小的誤差,但是這些小的誤差是能被理解與容忍的。 如果不能允許這樣的小誤差(比如涉及到金融領(lǐng)域),那么就得考慮使用 decimal 模塊了。