Skip to main content
 首页 » 编程设计

python之为什么在比较 float 结果时循环不开始

2025年05月04日22lyhabc

目标是当 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 的数字,然后停止。

请您参考如下方法:

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

>>> 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 
>>> 

下面应该是required reading

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