您的位置: 网站首页> 大家问> 当前文章
python四舍五入精确实现
老董2022-04-05182围观,106赞
python实现四舍五入似乎不是很容易。最开始想到的是round函数,但是结果并非如你所愿。实测代码如下:
# -*- coding:UTF-8 -*- print(round(0.234,2)) print(round(0.235,2)) print(round(0.5))
0.23 0.23 0
为何会出现这种现象?鄙人查了一些资料但是还不能完全解释,只能说这个涉及数据存储和运算的问题,涉及的非常底层。那该如何实现四舍五入呢?可以借助decimal模块实现。
# -*- coding:UTF-8 -*- from decimal import Decimal from decimal import ROUND_HALF_UP res1 = Decimal('0.234').quantize(Decimal('0.00'), rounding=ROUND_HALF_UP) res2 = str(Decimal('0.235').quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)) res3 = str(Decimal('0.5').quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)) print(res1,type(res1),float(res1)) print(res2) print(res3)
0.23 <class 'decimal.Decimal'> 0.23 0.24 0.50
上述Decimal('0.00')指保留两位小数,rounding指定进位方式,Decimal的返回值是一个decimal.Decimal对象。ROUND_HALF_UP表示Round to nearest with ties going away from zero的进位方式,即四舍五入。
如果你想给Decimal传入浮点数,代码不会报错,但是要避免这么做,因为结果有时候达不到四舍五入的预期。
# -*- coding:UTF-8 -*- from decimal import Decimal from decimal import ROUND_HALF_UP res1 = Decimal(0.234).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP) res2 = str(Decimal(0.235).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)) res3 = str(Decimal(0.5).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)) print(res1,type(res1),float(res1)) print(res2) print(res3)
0.23 <class 'decimal.Decimal'> 0.23 0.23 0.50
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
文章评论
-
python四舍五入精确实现文章写得不错,值得赞赏