因此,我開始構建一個函數,旨在糾正超出一定限制的前3個「分配」。計算float和存儲到列表給出了奇怪的值?
下面的函數現在返回一個列表,其中傳遞列表中每個值超出的值。
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]
這是怎麼回事?
使用格式化的printf四捨五入值。所使用的內部二進制表示不能與理性1/10完全匹配,多於一個打印的十進制可以完全匹配理性1/3。 – mpez0
如果要控制浮點精度超出格式化輸出,請查看[decimal](https://docs.python.org/2.7/library/decimal.html)模塊。 – schwobaseggl
我希望人們會停止鏈接到該通用問題,並找到更多Python特定的東西,因爲它們的工作方式或每種語言的固定方式都有細微差別。 –