python3 四舍五入及向上向下取整的方法
Python自带一个round函数可以截取数位,但在某些情况下精度不够,无法满足使用。
因为在Python 3里面,round对小数的精确度采用了四舍六入五成双的方式。
如果你写过大学物理的实验报告,那么你应该会记得老师讲过,直接使用四舍五入,最后的结果可能会偏高。所以需要使用奇进偶舍的处理方法。
例如对于一个小数a.bcd,需要精确到小数点后两位,那么就要看小数点后第三位:
如果d小于5,直接舍去
如果d大于5,直接进位
如果d等于5:
d后面没有数据,且c为偶数,那么不进位,保留c
d后面没有数据,且c为奇数,那么进位,c变成(c + 1)
如果d后面还有非0数字,例如实际上小数为a.bcdef,此时一定要进位,c变成(c + 1)
关于奇进偶舍,有兴趣的同学可以在维基百科搜索这两个词条:数值修约和奇进偶舍。
所以,round给出的结果如果与你设想的不一样,那么你需要考虑两个原因:
你的这个小数在计算机中能不能被精确储存?如果不能,那么它可能并没有达到四舍五入的标准,例如1.115,它的小数点后第三位实际上是4,当然会被舍去。
如果你的这个小数在计算机中能被精确表示,那么,round采用的进位机制是奇进偶舍,所以这取决于你要保留的那一位,它是奇数还是偶数,以及它的下一位后面还有没有数据。
如何正确进行四舍五入
如果要实现我们数学上的四舍五入,那么就需要使用decimal模块。
deciaml中有多种舍入模式
舍入模式
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 则舍入到零的反方向;否则舍入方向为零。
使用方法
1 2 3 4 5 6 | from decimal import Decimal, ROUND_CEILING sss = '2.3267' sst = '2.3261' rounded_decimal1 = Decimal(sss).quantize(Decimal( '1.000' ), rounding = ROUND_CEILING) rounded_decimal2 = Decimal(sst).quantize(Decimal( '1.000' ), rounding = ROUND_CEILING) |
结果为:
2.327 2.327
其余模式自行测试
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix