python浮点数精确计算 ,小数点精确计算问题

1、浮点数计算出错

a=1.1
b=2.2
a+b 

输出:
在这里插入图片描述
出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确
比如说: 0.1是十进制,转化为二进制后它是个无限循环的数:
0.00011001100110011001100110011001100110011001100110011001100
而python是以双精度(64)位来保存浮点数,多余的位会被截掉,所以看到的是0.1,但在电脑上实际保存的已不是精确的0.1。

【注意】
这是二进制浮点数的自然性质:它不是 Python 中的一个 bug,也不是你的代码中的 bug。你会看到所有支持硬件浮点数算法的语言都会有这个现象。

——————————————————————————————
所以a+b 在计算机里就不等于3.3了
在这里插入图片描述

2、怎么改

对于需要精确十进制表示的情况,可以尝试使用 decimal 模块,它实现的十进制运算适合会计方面的应用和高精度要求的应用。

查看官方文档请点击这里

——————————————————————
例子:

from decimal import Decimal
a = Decimal('1.1')
b = Decimal('2.2')
a+b 

输出:
在这里插入图片描述

完美,终于出来了3.3
——————————————————————————
更多用法: 设置精度,小数点后几位设置

from decimal import *
getcontext().prec = 6  #设置精度,小数点后6位
Decimal(1) / Decimal(7)

在这里插入图片描述

getcontext().prec = 28
Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210105172028966.png

————————————————————————————

出错总结

【注意】

1、写的时候要注意不要忘记了 ‘1.1’ 和 ‘2.2’ ,要加引号,不然等于没使用到
2、计算的时候 a,b 都要已经转换成Decimal 模式,不然会出错

来看看出错的方式:

第一种:

from decimal import Decimal
a = Decimal(1.1)
b = Decimal(2.2)
a+b 

在这里插入图片描述

第二种:

from decimal import Decimal
a = Decimal('1.1')
b = 2.2
a+b 

在这里插入图片描述

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Python浮点数保留两位并不一定需要进位。这取决于保留的方式。通常来说,使用round()函数保留两位小数时,当第三位小数大于等于5时,会向上进位;否则,直接舍去第三位小数。但是,如果使用format()函数来格式化输出,可以通过指定格式来决定是否要进位。 ### 回答2: 在Python中,浮点数保留两位小数的方法是使用round()函数。当需要保留两位小数时,我们可以使用round函数将浮点数四舍五入到指定的小数位数,例如: ``` num = 3.14159 rounded_num = round(num, 2) print(rounded_num) ``` 输出结果为3.14。 然而,需要注意的是,round()函数中的第二个参数并不是指定保留的小数位数,而是指定要保留的小数位数后面的数字。在正常情况下,round()函数会按照四舍五入的规则进行舍入。 当浮点数的第三位小数大于等于5时,需要进位到第二位小数。例如: ``` num = 3.1459 rounded_num = round(num, 2) print(rounded_num) ``` 输出结果为3.15。 因此,如果需要精确保留两位小数,并且第三位小数大于等于5时需要进位,可以使用round()函数来实现。 ### 回答3: Python浮点数保留两位小数时,是否需要进位取决于小数点后第三位的数值。如果第三位数大于等于5,则需要进位;如果第三位数小于5,则不需要进位。 例如,对于浮点数3.145,保留两位小数时,第三位数是5,大于等于5,所以需要进位,最终结果为3.15。 又例如,对于浮点数3.141,保留两位小数时,第三位数是1,小于5,所以不需要进位,最终结果为3.14。 需要注意的是,由于计算机在存储浮点数时会存在精度问题,所以在进行浮点数计算与比较时,可能会出现一些不准确的情况。如果需要对浮点数进行精确计算,建议使用Decimal类型来处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值