python取数组中最接近某值的元素

直接放代码,本人是新手自学点皮毛,高手别见怪,顺便问一下为什么,1.51-1.3不等于0.21而需要Decimal才能显示出正确值呢:

    li = [1.23, 1.25, 1.3, 1.59, 1.52, 1.50, 1.7, 1.33, 1.22, 1.22, 1.9, 1.2]
    defaultnumber = 1.51
    select = Decimal(str(defaultnumber)) - Decimal(str(li[0]))
    index = 0
    for i in range(1, len(li) - 1):
        select2 = Decimal(str(defaultnumber)) - Decimal(str(li[i]))
        if (abs(select) > abs(select2)):
            select = select2
            index = i
        # select = min(select, abs(select2))
    print('结果', li[index], select)

整理的出方法:

def index_number(li,defaultnumber):
    select = Decimal(str(defaultnumber)) - Decimal(str(li[0]))
    index = 0
    for i in range(1, len(li) - 1):
        select2 = Decimal(str(defaultnumber)) - Decimal(str(li[i]))
        if (abs(select) > abs(select2)):
            select = select2
            index = i
    return  li[index]

顺便问一下为什么

    print(Decimal(1.5)-Decimal(1.3))
    print(float(1.5) - float(1.3))
    print(int(1.5) - int(1.3))
    print(Decimal('1.5') - Decimal('1.3'))
    print(Decimal(str(1.5)) - Decimal(str(1.3)))

得出的结果是:
0.1999999999999999555910790150
0.19999999999999996
0
0.2
0.2
这是什么原因呢?求高手解答一下。谢谢

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值