python - 避免影响条件的二进制舍入错误的最佳方法是什么?
问题描述
我在我的部分代码中注意到了这种奇怪的行为:
num = 0.14
num += 0.01
if num == 0.15:
print('equal')
elif num > 0.15:
print('greater')
elif num < 0.15:
print('less')
> greater
我认为这是因为二进制舍入错误,所以num
实际上存储为0.1500000000001
或其他东西。我只是想知道在条件语句中避免此类错误的最佳方法是什么?
解决方案
当然四舍五入:
num = 0.14
num += 0.01
num=round(num,2)
if num == 0.15:
print('equal')
elif num > 0.15:
print('greater')
elif num < 0.15:
print('less')
输出:
equal
更好decimal
的模块:
from decimal import Decimal
num = Decimal('0.14')
num += Decimal('0.01')
num=float(num)
if num == 0.15:
print('equal')
elif num > 0.15:
print('greater')
elif num < 0.15:
print('less')
输出:
equal
当然,比较decimal.Decimal
类型:
from decimal import Decimal
num = Decimal('0.14')
num += Decimal('0.01')
if num == Decimal('0.15'):
print('equal')
elif num > Decimal('0.15'):
print('greater')
elif num < Decimal('0.15'):
print('less')
输出:
equal
推荐阅读
- python-3.x - 如何使用 pandas 复制一行并将其直接附加到复制的行之后?
- html - 我想使用带有 div ID 的 JQuery 更改锚 LINK 和图像 SRC
- c# - 在monodb c#驱动程序中使用聚合函数显示类别项目及其计数
- java - 在Java中使用循环在数组的开头插入一个字符串元素而不使最后一个元素消失
- reactjs - TypeError:无法读取未定义的属性(读取“地图”)
- flutter - 如何在颤动中变形图像?
- javascript - 如何找到二维数组中的最大数?
- javascript - Keycloak 在一台服务器上,客户端应用在不同的服务器上
- python - PyTorch 的 nn.Conv2d 半精度(fp16)比 fp32 慢
- java - 为 QR 码边缘而不是方形自定义 QR 码,并且想要更改代码 android 的颜色?