繁体   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