ほんじゃらねっと

ダイエット中プログラマのブログ

Pythonで10進数計算したり数値を丸めたりする

指定した桁で切り捨てたり四捨五入したり、
2進数だと丸め誤差が生じる計算を正しく行うための標準ライブラリ。

from decimal import *
x = Decimal("2.467")
y = Decimal("3.512")
# 小数点以下を切捨て
print Decimal(x).quantize(Decimal('1.'), rounding=ROUND_DOWN) # 2
print Decimal(y).quantize(Decimal('1.'), rounding=ROUND_DOWN) # 3
# 小数点以下を切り上げ
print Decimal(x).quantize(Decimal('1.'), rounding=ROUND_UP) # 3
print Decimal(y).quantize(Decimal('1.'), rounding=ROUND_UP) # 4
# 小数点以下を四捨五入
print Decimal(x).quantize(Decimal('1.'), rounding=ROUND_HALF_UP) # 2
print Decimal(y).quantize(Decimal('1.'), rounding=ROUND_HALF_UP) # 4
# 小数点2桁で四捨五入
print Decimal(x).quantize(Decimal('.00'), rounding=ROUND_HALF_UP) # 2.47
print Decimal(y).quantize(Decimal('.00'), rounding=ROUND_HALF_UP) # 3.51

丸め用の定数は上記の3つ(ROUND_UP、ROUND_DOWN、ROUND_HALF_UP)以外にも
ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_DOWN, ROUND_HALF_EVENがあるようだが、ちがいが良く分からない。


Pythonライブラリリファレンス
http://www.python.jp/doc/nightly/lib/module-decimal.html