Python 计算float并存储到list会给出奇怪的值吗?

Python 计算float并存储到list会给出奇怪的值吗?,python,floating-point,Python,Floating Point,因此,我开始构建一个函数,我的目标是纠正前3个超出一定限制的“分配” 下面的函数现在返回一个列表,其中包含传递列表中每个值的超出值 def correct_wrong_allocations_zw(weight_vect): temp_weight_vect = list(weight_vect[:3]) limits = [1.00, 0.30, 0.25] too_much_list = [] too_much = 0.00 for i in ra

因此,我开始构建一个函数,我的目标是纠正前3个超出一定限制的“分配”

下面的函数现在返回一个列表,其中包含传递列表中每个值的超出值

def correct_wrong_allocations_zw(weight_vect):
    temp_weight_vect = list(weight_vect[:3])

    limits = [1.00, 0.30, 0.25]
    too_much_list = []

    too_much = 0.00
    for i in range(0, len(temp_weight_vect)):
        if temp_weight_vect[i] > limits[i]:
            too_much_list.append(temp_weight_vect[i]-limits[i])

    return too_much_list

allocations = [0.10, 0.40, 0.50, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00]
allocations = correct_wrong_allocations_zw(allocations)
print allocations
分配[1]和限额[1]之间的差值为0.10,但该计划的结果是:

[0.10000000000000003, 0.25]
发生了什么事?

这可能会有帮助

注意,这是二进制浮点的本质:这是 在Python中不是bug,在代码中也不是bug。你会 在所有支持您的应用程序的语言中都可以看到相同的内容 硬件的浮点运算(尽管某些语言可能不支持 默认情况下或在所有输出模式下显示差异)


顺便说一句,您可以使用模块
decimal
查看存储在任何特定Python浮点中的精确值。就你而言

>>> from decimal import Decimal
>>> Decimal(0.4-0.3)
Decimal('0.100000000000000033306690738754696212708950042724609375')

使用格式化的printf对值进行四舍五入。使用的内部二进制表示法不能完全匹配rational 1/10,就像打印的十进制数可以完全匹配rational 1/3一样。如果您想控制超出格式化输出的浮点精度,请查看模块。我希望人们停止链接到通用问题,并找到更具体的Python,因为这在每种语言中都有细微差别,或者可以对每种语言进行修正。如果需要进行精确的十进制运算,还可以使用
Decimal
模块。