一个整数循环减0.01第十三次后小数位增加?

x = 2
for i in range(0, 100):
if 0.99 >= x:
break
x = x-0.01
print(x)

运行结果:

回答

问题:出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确。
0.012 z . ( 7 T ` 7进过二进制转换会是一个无限长的小数
0.00000010100011110101110000101000111101011100001010001111011
可以使用二进制转换工具查看
,而对于计算机来说肯定是没有办法存储那么^ n ) o多数字的,(一个双精度也就64位),所以后面的数字将会失效,也就是所说的“精度丢失”
解决办法:
使用decimal库

from decimal import Decimal
x = Decimal(str(2))
for i in range(0, 100):
    if 0.99 >= x:
        break
    x = x-Decimal(str(0.01))
    print(x)