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')
————————————————————————————
出错总结
【注意】
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