Effective Python 讀書筆記: 第47條: 在重視精確度的場合,應該使用decimal

# -*- encoding: utf-8 -*-

import decimal

'''
第47條: 在重視精確度的場合,應該使用decimal

關鍵:
1 python數值
可以表示任意長度的值
round(value, preciseNum):
value: 待處理的值
preciseNum: 保留的小數位個數
最終round結果是向下取整, 3.444取精度保留兩位小數的結果是3.44

2 decimal模塊
有decimal.Decimal: 提供28個小數位,進行定點計算
用法: decimal.Decimal(numStr),
其中numStr是字符串表示的數字,例如"3.29'
指定精度和舍入方式:
decimal.Decimal.quantize(decimal.Decimal('0.01'), rounding=ROUND_UP)

用法示例:
    rate = decimal.Decimal('1.45')
    time = decimal.Decimal('222')
    result = rate * time / decimal.Decimal('60')
    print result
    # 指定精度和舍入方式
    rounded = result.quantize(decimal.Decimal('0.01'), rounding=decimal.ROUND_UP)
    print rounded

3 總結
decimal.Decimal適用於對精度要求很高的場合,或者用戶可以自己設定舍入方式的場合


參考:
Effectiv Python 編寫高質量Python代碼的59個有效方法
'''
def useRound():
    rate = 1.45
    seconds = 3 * 60 + 42
    result = rate * seconds / 60
    print result
    print round(result, 2)


def useDecimal():
    rate = decimal.Decimal('1.45')
    time = decimal.Decimal('222')
    result = rate * time / decimal.Decimal('60')
    print result
    # 指定精度和舍入方式
    rounded = result.quantize(decimal.Decimal('0.01'), rounding=decimal.ROUND_UP)
    print rounded


def process():
    useRound()
    useDecimal()


if __name__ == "__main__":
    process() 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章