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

python中的四舍六入五平分

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

python中的四舍六入五平分

        最近学python,发现浮点数计算得不到想要的精度(据查:浮点数本身就不精确),推荐使用decimal。然后又发现小数截取上也有些问题:与以往用的其它语言完全不一样。通常情况下四舍五入,看被舍弃位数是否大于4,大于就进一位,否则就舍弃。python的结果就有眯难以理解了。据查是叫作“四舍六入五平分”,即小于等于4舍弃,大于等于6进一位,5则看5前一位是奇是偶,奇进偶不进。结果尝试一下,发现并非如此。

       环境:win10+vs code1.61.2+python3.10

        代码如下:

print('四舍五入6.605=', round(Decimal(6.605), 2))
print('四舍五入6.615=', round(Decimal(6.615), 2))
print('四舍五入6.625=', round(Decimal(6.625), 2))
print('四舍五入6.635=', round(Decimal(6.635), 2))
print('四舍五入6.645=', round(Decimal(6.645), 2))
print('四舍五入6.655=', round(Decimal(6.655), 2))
print('四舍五入6.665=', round(Decimal(6.665), 2))
print('四舍五入6.675=', round(Decimal(6.675), 2))
print('四舍五入6.685=', round(Decimal(6.685), 2))
print('四舍五入6.695=', round(Decimal(6.695), 2))
print()
print('四舍五入6.705=', round(Decimal(6.705), 2))
print('四舍五入6.715=', round(Decimal(6.715), 2))
print('四舍五入6.725=', round(Decimal(6.725), 2))
print('四舍五入6.735=', round(Decimal(6.735), 2))
print('四舍五入6.745=', round(Decimal(6.745), 2))
print('四舍五入6.755=', round(Decimal(6.755), 2))
print('四舍五入6.765=', round(Decimal(6.765), 2))
print('四舍五入6.775=', round(Decimal(6.775), 2))
print('四舍五入6.785=', round(Decimal(6.785), 2))
print('四舍五入6.795=', round(Decimal(6.795), 2))

        结果如下:

四舍五入6.605= 6.61            
四舍五入6.615= 6.62    V        
四舍五入6.625= 6.62    V        
四舍五入6.635= 6.63
四舍五入6.645= 6.64    V        
四舍五入6.655= 6.66    V        
四舍五入6.665= 6.67
四舍五入6.675= 6.67
四舍五入6.685= 6.68    V
四舍五入6.695= 6.70    V

四舍五入6.705= 6.71    
四舍五入6.715= 6.71    
四舍五入6.725= 6.72    V
四舍五入6.735= 6.74    V
四舍五入6.745= 6.75
四舍五入6.755= 6.75
四舍五入6.765= 6.76    V
四舍五入6.775= 6.78    V
四舍五入6.785= 6.79
四舍五入6.795= 6.79

        并没有所谓的“五平分”:前面是0的均进位,后面有‘V’表示遵循了奇进偶不进的原则。正准备表示不知道原因时,想到了传入数值的问题,一开始的写法是‘round(6.605,2)’,再又改成'round(Decimal(6.705), 2)',结果还是随缘。继续度一下,看到一个文章写的也是传入数值的问题,只不过他研究比我更深入,我只想到了一,而没想到二。文章说“一旦要做精确计算,那么就不应该再单独使用浮点数,而是应该总是使用 Decimal('浮点数')。否则,当你赋值的时候,精度已经被丢失了,建议全程使用Decimal”。

        我再次尝试'round(Decimal('6.705'), 2)',完全符合“四舍六入五平分”的原则,因为在Decimal(6.705)中,本身传入的就是一个不精确的浮点数,所以得不到预期结果。

        启示:不是最终结果不轻易进行取舍,进行数学计算时要全程使用decimal,需要四舍五入时可以自定义一个函数。

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

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

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