>>> a = 0.3135
>>> print("%.3f" % a)
0.314
>>> a = 0.3125
>>> print("%.3f" % a)
0.312
>>>
私は 0.312 ではなく 0.313 を期待しています。これがなぜなのか考えてみてください。0.313 を取得するために使用できる別の方法はありますか?
ありがとう
Python 3 は、IEEE 754 標準に従って、偶数への丸めアプローチを使用して丸めます。
別の方法で丸めたい場合は、単純に手動で実装します。
import math
def my_round(n, ndigits):
part = n * 10 ** ndigits
delta = part - int(part)
# always round "away from 0"
if delta >= 0.5 or -0.5 < delta <= 0:
part = math.ceil(part)
else:
part = math.floor(part)
return part / (10 ** ndigits) if ndigits >= 0 else part * 10 ** abs(ndigits)
使用例:
In [12]: my_round(0.3125, 3)
Out[12]: 0.313
注: python2 では、丸めは常にゼロから離れていますが、python3 では偶数に丸められます。(たとえば、round
2.7 と 3.3 の間の関数のドキュメントの違いを参照してください)。
精度が必要な場合は floatを使用せず、 Decimalを使用してください
>>> from decimal import *
>>> d = Decimal(0.3125)
>>> getcontext().rounding = ROUND_UP
>>> round(d, 3)
Decimal('0.313')
または分数