Python有一个内置函数round,我以为是可以用来四舍五入的,其实并不是,我们来试试看:
测试环境是 Python 3.8.5,windows系统
round函数
print("使用round函数")
print(round(1.005, 2)) # 1
print(round(1.025, 2)) # 1.02
print(round(1.045, 2)) # 1.04
print(round(1.065, 2)) # 1.06
print(round(1.085, 2)) # 1.08
print(round(1.015, 2)) # 1.01
print(round(1.035, 2)) # 1.03
print(round(1.055, 2)) # 1.05
print(round(1.075, 2)) # 1.07
print(round(1.095, 2)) # 1.09
结果:
使用round函数
1.0
1.02
1.04
1.06
1.08
1.01
1.03
1.05
1.07
1.09
保留两位小数,小数第三位是5,按理来说,都应该进1,结果却跟我们想象的不太一样,那我们应该怎样实现四舍五入呢?
decimal模块
ROUND_HALF_UP 用来实现四舍五入
from decimal import ROUND_HALF_UP
from decimal import Decimal
print('使用Decimal模块')
print(Decimal('1.011').quantize(Decimal('0.01'), ROUND_HALF_UP))
print(Decimal('1.022').quantize(Decimal('0.01'), ROUND_HALF_UP))
print(Decimal('1.033').quantize(Decimal('0.01'), ROUND_HALF_UP))
print(Decimal('1.044').quantize(Decimal('0.01'), ROUND_HALF_UP))
print(Decimal('1.055').quantize(Decimal('0.01'), ROUND_HALF_UP))
print(Decimal('1.066').quantize(Decimal('0.01'), ROUND_HALF_UP))
print(Decimal('1.077').quantize(Decimal('0.01'), ROUND_HALF_UP))
print(Decimal('1.088').quantize(Decimal('0.01'), ROUND_HALF_UP))
print(Decimal('1.099').quantize(Decimal('0.01'), ROUND_HALF_UP))
结果:
使用Decimal模块
1.01
1.02
1.03
1.04
1.06
1.07
1.08
1.09
1.10
除了了四舍五入,decimal还有不同的舍入模式,下面就是官方手册的说明:
模式 | 解释 |
---|---|
decimal.ROUND_CEILING | 舍入方向为 Infinity。 |
decimal.ROUND_DOWN | 舍入方向为零。 |
decimal.ROUND_FLOOR | 舍入方向为 -Infinity。 |
decimal.ROUND_HALF_DOWN | 舍入到最接近的数,同样接近则舍入方向为零。 |
decimal.ROUND_HALF_EVEN | 舍入到最接近的数,同样接近则舍入到最接近的偶数。 |
decimal.ROUND_HALF_UP | 舍入到最接近的数,同样接近则舍入到零的反方向。 |
decimal.ROUND_UP | 舍入到零的反方向。 |
decimal.ROUND_05UP | 如果最后一位朝零的方向舍入后为 0 或 5 则舍入到零的反方向;否则舍入方向为零。 |
其中 ROUND_HALF_UP 就是四舍五入,ROUND_HALF_EVEN 就是 银行家舍入法
那么请问round函数是上面哪种方式呢?还是都不属于呢?