[英]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.