首页 > 解决方案 > 为什么比较浮点结果时循环不开始?

问题描述

目标是当 sleep_time 达到 0.1 时,它会启动一个循环,在其中打印数字。

import time

number = 0
sleep_time = 1

# Main code
while sleep_time >= 0.1:
    if sleep_time == 0.1:
        while True:
            print(number)
    number += 1
    time.sleep(sleep_time)
    print(number)
    sleep_time -= 0.1

这会打印从 1 到 10 的数字,然后停止。

标签: pythonpython-3.x

解决方案


这是浮点不精确的问题,请考虑:

>>> sleep = 1
>>> dec = 0.1
>>> for _ in range(9):
...     sleep -= dec
...
>>> sleep
0.10000000000000014
>>> sleep == 0.1
False
>>>

在处理这类事情时,通常math.isclose是一个可行的解决方案:

>>> import math
>>> math.isclose(sleep, 0.1)
True
>>>

以下内容应为必读

其他方法是仅使用int对象,或使用decimal.Decimal.


推荐阅读