[英]How to compare float and decimal in python?
我在decimal.Decimal
中有一个(十进制。十进制)列,如下所示:
dt = pd.DataFrame({"OPEN": [-0.00010,-0.0114, 0.0066,-0.0044,-0.0012,-0.0005,
0.0005,-0.0037, -0.0029, 0.0034, 0.0003, 0.0001 ]})
dt["OPEN"] = dt["OPEN"].apply(Decimal)
我想在Open
列上apply
以下方法:
def label_change_price(delta):
if 0 < abs(delta) < 0.0001:
print(" Return value: ",0, "Delta: ",delta)
return 0
elif 0.0001 <= abs(delta) < 0.0002:
print(" Return value: ",1, "Delta: ",delta)
return int(np.sign(delta)) * 1
elif 0.0002 <= abs(delta) < 0.0003:
print(" Return value: ",2, "Delta: ",delta)
return int(np.sign(delta)) * 2
elif 0.0003 <= abs(delta):
print(" Return value: ",3, "Delta: ",delta)
return int(np.sign(delta)) * 3
当我运行代码时,对于第一行( -0.00010
)它打印
Return value: 0 Delta: -0.00010
这是错误的,因为它必须返回1
,但它返回0
。
换句话说, if
中的第一个条件为True
并且它不会继续到第二个elif
。
所以,我想知道,当增量为 0.0001 时,为什么我的第二个elif 0.0001 <= abs(delta) < 0.0002:
不能正常工作? 我该如何解决?
您可以尝试这样的比较:
if abs(Decimal(0)) < abs(delta) < abs(Decimal(0.0001)):
比较似乎很棘手:
from decimal import Decimal
Decimal(0.0001) == 0.0001
# True
abs(Decimal(0.0001)) == 0.0001
# False
Decimal(0.0001) == Decimal(0.0001)
# True
abs(Decimal(0.0001)) == Decimal(0.0001)
# False
abs(Decimal(0.0001)) == abs(Decimal(0.0001))
# True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.