”无名”之辈 2020-09-25 19:58 采纳率: 80%
浏览 52
已结题

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

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


运行结果:
图片说明

  • 写回答

2条回答 默认 最新

  • 世幻水 2020-09-25 21:20
    关注

    问题:出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确。
    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)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月11日