Python保留小數的方法


因總是忘記保留小數的方法,故在此做個總結。

方法一:字符串格式化

>>> print('%.2f' % 1.255)
1.25

# 補充左側補0
>>> print('%03d' % 7)
007

方法二:format函數方法
format函數有兩種寫法
1、使用占位符(需注意占位符和冒號不能丟),此方法可以一次輸出多個

>>> print('{:.2f}, {:.3f}'.format(1.256, 1.2635))
1.26, 1.264

# 左側補0
>>> print('{:02d}'.format(5))
05

2、不使用占位符,此方法只能一次輸出一個,並且需要格式化的數字在前

>>> print(format(1.235, '.2f'))
1.24

# 左側補0
>>> print(format(9, '05d'))
00009

方法三:round函數
round函數返回浮點數的四舍五入值,第一個參數是浮點數,第二個參數是保留的小數位數,不寫默認保留到整數;

>>> print(round(1.2345, 3))
1.234
>>> print(round(1.23456, 3))
1.235
>>> print(round(2.5))
2
>>> print(round(3.5))
4

但round函數有坑,在Python3.5的文檔中:“values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done toward the even choice.”,意為:“保留值將保留到離上一位更近的一端(四舍六入),如果距離兩端一樣遠,則會保留到偶數的一端”;下面用例子來解釋一下:

>>> round(3.332, 2)    # 3.332保留兩位小數,3.332距離3.33更近(0.002),距離3.34較遠(0.008),因此保留到3.33
3.33
>>> round(3.337, 2)    # 3.337保留兩位小數,3.337距離3.34更近(0.003),距離3.33較遠(0.007),因此保留到3.34
3.34

另外,在機器中浮點數不一定能精確表達,“換算成1和0后,可能是無限位數的,而機器會進行截斷處理”,因此實際在機器中的浮點數與我們看到的並不完全一致,在機器中保存的比實際的數字大一點或者小一點,而round函數是保留到離上一位更近的一端,因此如果對精確度要求高的話,不建議使用。

>>> round(2.265, 2)
2.27
>>> round(2.275, 2)
2.27
>>> round(2.285, 2)
2.29

方法四:decimal模塊
decimal意思為十進制,這個模塊提供了十進制浮點數運算支持,可以給Decimal傳遞整型或字符串參數,但不能是浮點數數據,因為浮點數本身就不准確。該模塊遵循四舍五入

>>> from decimal import Decimal
>>> Decimal('1.23456').quantize(Decimal('0.000'))
Decimal('1.235')
>>> Decimal(123).quantize(Decimal('0.0'))
Decimal('123.0')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM