通过使用 Python 内置的 decimal 模块,实现对小数保留位数进行精确控制的方法。

四舍六入五成双(银行家舍入规则)

import decimal
for i in range(100):
    s = f'1.{i:02}5'
    a = float(s)
    b = int(a * 100 + 0.5) / 100
    c = decimal.Decimal(s)
    print(a,
          round(a, 2),
          f'{a:.2f}',
          b,
          round(c, 2),
          sep=' \t')

四舍五入

方法1

import decimal
decimal.getcontext().rounding = decimal.ROUND_HALF_UP
for i in range(100):
    s = f'1.{i:02}5'
    a = float(s)
    b = int(a * 100 + 0.5) / 100
    c = decimal.Decimal(s)
    print(a,
          round(a, 2),
          f'{a:.2f}',
          b,
          round(c, 2),
          sep=' \t')

方法2

import decimal
for i in range(100):
    s = f'1.{i:02}5'
    a = float(s)
    b = int(a * 100 + 0.5) / 100
    c = decimal.Decimal(s)
    print(a,
          round(a, 2),
          f'{a:.2f}',
          b,
          c.quantize(decimal.Decimal('0.01'), decimal.ROUND_HALF_UP)
          sep=' \t')

注意:一定要通过字符串创建 decimal 对象!

文章目录