# -*- 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()