提问人:Jeff 提问时间:11/27/2021 更新时间:11/28/2021 访问量:106
如何在python中比较float和decimal?
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)
我想在专栏上使用以下方法:apply
Open
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
所以,我想知道,为什么我的第二个不能很好地工作,当 delta 为 0.0001 时?我该如何解决它?elif 0.0001 <= abs(delta) < 0.0002:
答:
-1赞
TMBailey
11/28/2021
#1
您可以尝试这样的比较:
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
评论
1赞
Jeff
11/28/2021
是的,但为什么它如此复杂?
评论
delta = -0.0001
print(0.0001 <= abs(delta) < 0.0002)
csv
delta