python - 为什么比较浮点结果时循环不开始?
问题描述
目标是当 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
>>>
以下内容应为必读
其他方法是仅使用int
对象,或使用decimal.Decimal
.
推荐阅读
- django - Django 错误:'ManyToManyDescriptor' 对象没有属性 'all'
- c# - c# 登录时从数据表中获取ID
- javascript - 使用 JavaScript 根据在搜索栏中输入的多个单词对数组进行动态过滤
- android - 回收器视图,在整个项目视图上使用点击监听器时不滚动
- c# - C#读取路径没有我把/放在每个子文件夹中
- oracle - 值列表 PL/SQL 函数体在 APEX 中返回 sql 查询而不读取项目值
- r - 将数据框拆分为包含一列常量的列表
- rest - Jitsi REST api:通过认证
- bash - 如何在 bash expect 中返回错误?
- python - VBA - 128位值到128个复选框