簡體   English   中英

如何比較 python 中的浮點數和十進制數?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM