Skip to content

decimal#

quantize() メソッドで任意の桁で小数点を丸めることができます。

from decimal import Decimal,ROUND_DOWN
workingtime = 7.5234

time = Decimal(str(workingtime)).quantize(Decimal('.01'), rounding=ROUND_DOWN)
print(time)
# 7.52

rouding 引数で指定できる丸めモードは以下の通りです。

丸めモード 説明 ROUND_CEILING Infinity 方向に丸めます。 ROUND_DOWN ゼロ方向に丸めます。 ROUND_FLOOR -Infinity 方向に丸めます。 ROUND_HALF_DOWN 近い方に、引き分けはゼロ方向に向けて丸めます。 ROUND_HALF_EVEN 近い方に、引き分けは偶数整数方向に向けて丸めます。 ROUND_HALF_UP 近い方に、引き分けはゼロから遠い方向に向けて丸めます。 ROUND_UP ゼロから遠い方向に丸めます。 ROUND_05UP ゼロ方向に丸めた後の最後の桁が 0 または 5 ならばゼロから遠い方向に、そうでなければゼロ方向に丸めます。

Worning

Decimal 関数には文字列型を渡します。

補足:f-string#

f-strings での表示は小数点切り上げです

>>> workingtime = 7.555555
>>> print(f"{workingtime:.2f}")
7.56

補足: round#

浮動小数点数に対する round() の振る舞いは意外なものかもしれません: 例えば、 round(2.675, 2) は予想通りの 2.68 ではなく 2.67 を与えます。 これはバグではありません: これはほとんどの小数が浮動小数点数で正確に表せないことの結果です。