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

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


运行结果:
图片说明

问题:出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确。
0.01 在进过二进制转换会是一个无限长的小数
0.00000010100011110101110000101000111101011100001010001111011
可以使用二进制转换工具查看
,而对于计算机来说肯定是没有办法存储那么多数字的,(一个双精度也就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)
x = 2
for i in range(0, 100):
    if 0.99 >= x:
        break
    x = round(x- 0.01, 2)
    print(x)

https://blog.csdn.net/qq_40680263/article/details/99312833