7
>>> a = 0.3135
>>> print("%.3f" % a)
0.314
>>> a = 0.3125
>>> print("%.3f" % a)
0.312
>>>

私は 0.312 ではなく 0.313 を期待しています。これがなぜなのか考えてみてください。0.313 を取得するために使用できる別の方法はありますか?

ありがとう

4

4 に答える 4

9

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 では偶数に丸められます。(たとえば、round2.7 と 3.3 の間の関数のドキュメントの違いを参照してください)。

于 2013-08-27T19:18:16.047 に答える
2

精度が必要な場合は floatを使用せず、 Decimalを使用してください

>>> from decimal import *
>>> d = Decimal(0.3125)
>>> getcontext().rounding = ROUND_UP
>>> round(d, 3)
Decimal('0.313')

または分数

于 2019-11-01T07:32:56.747 に答える