python四舍五入运算产生误差的原因以及实现精确四舍五入的方法

       由于python中,数字都是用二进制方式储存的,所以当我们直接输入一个十进制的浮点数,比如3.675,其并无法精确的用二进制表示或储存,只能以一定精度进行近似表示。这时,如果我们需要对其做一些运算,比如四舍五入,由于实际操作的对象是二进制浮点数,而二进制浮点数常常又无法精确的表示十进制浮点数,这时就会存在误差。看如下例子。

       可以看到,当我们直接用round函数对3.657保留两位小数时,得到的并不是我们期望的3.68,这并非round函数不符合四舍五入规则,而是因为我们输入的十进制浮点数在计算机里面是以二进制方式储存的,只能近似的表示,这里便是以3.6749999....在保存的,所以自然的四舍五入就直接的近似为3.67了。

       对此,可以用以下方法,直接以十进制的方式储存3.675,然后再进行相应的四舍五入运算。

       上面代码中,我们利用了python的标准库decimal,要注意的是,我们精确保存十进制数3.675的方式是以字符串的方式转给Decimal的,而不是直接的数字,因为当我们直接传数字给Decimal时,实际上就是传了一个二进制浮点数对象给Decimal,返回的结果就是该二进制浮点数对象的近似十进制的表达,如图所示。而若是以字符串的形式传给Decimal,则是以转化字符串的方式返回一个精确的十进制数对象,从而可以精确的表达十进制数。这时,

1、我们便可以再利用round函数直接对精确的十进制数对象近似四舍五入运算,便可以得到精确的结果。当然,

2、还可以利用Decimal对象的quantize函数,如图所示,其中Decimal(‘0.01’)是需要的精度,而rounding参数表示近似的方式,这里的ROUND_HALF_UP是decimal的一个常量,表示当遇到5时,向上取近值,其实就是四舍五入。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值