您的位置: 网站首页> 大家问> 当前文章

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学习会

文章评论

    python四舍五入精确实现文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200