私は、ある限界を超える最初の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]
?
値を丸めるには、書式付きのprintfを使用してください。使用される内部バイナリ表現は、合理的な1/10に正確に一致することはできません。印刷された小数点以上は、合理的な1/3に完全に一致します。 – mpez0
浮動小数点精度をフォーマットされた出力以上に制御する場合は、[decimal](https://docs.python.org/2.7/library/decimal.html)モジュールを参照してください。 – schwobaseggl
私は人々がその汎用目的の質問へのリンクをやめ、Python固有のものを見つけることを願っています。なぜなら、これがどのように動作するか、各言語で修正できるかというニュアンスがあるからです。 –