栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 浮点数的舍入,round与decimal舍入方式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 浮点数的舍入,round与decimal舍入方式

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函数是上面哪种方式呢?还是都不属于呢?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018318.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号