モジュラス演算子を使用していますが、浮動小数点エラーが発生します。例えば、モジュラス浮動小数点エラーを回避する方法は?
>>> 7.2%3
1.2000000000000002
はround
機能を使用してこれを処理するための私の唯一の頼みの綱ですか?例えば。
>>> round(7.2%3, 1)
1.2
私は先験的には桁数が、私はへのラウンドする必要がするつもりですので、よりよい解決策があります場合、私は思ったんだけど知りませんか?
モジュラス演算子を使用していますが、浮動小数点エラーが発生します。例えば、モジュラス浮動小数点エラーを回避する方法は?
>>> 7.2%3
1.2000000000000002
はround
機能を使用してこれを処理するための私の唯一の頼みの綱ですか?例えば。
>>> round(7.2%3, 1)
1.2
私は先験的には桁数が、私はへのラウンドする必要がするつもりですので、よりよい解決策があります場合、私は思ったんだけど知りませんか?
あなたが任意の精度が必要な場合は、decimal
モジュールを使用します。
>>> import decimal
>>> decimal.Decimal('7.2') % decimal.Decimal('3')
Decimal('1.2')
くださいread the documentation carefully。
注意Decimal
の引数としてstr
を使用しました。私がしなければどうなるか見てください:
>>> decimal.Decimal(7.2) % decimal.Decimal(3)
Decimal('1.200000000000000177635683940')
>>>
だから私は ''数値 ''にそれらを渡す前に 'str()'を確認する必要があります。とった。ありがとう! – wogsland
@wogsland自動的に丸められる 'str'には注意が必要ですが、浮動小数点エラーは丸めに入る可能性があります。可能であれば文字列リテラルを使用してください。 –
'decimal.Decimal'の使用を検討しますか? – Marii
浮動小数点数は正確な値ではありません。 '' 7.2''を書いた瞬間、プログラムに不正確さが導入されました。あなたのプログラムが1兆分の1パーセントの誤差で生きていけない場合は、小数または合理的なデータ型を使用する必要があります。 – jasonharper
私はこれがここで答えられたと思います。数学は変だから。 http://stackoverflow.com/questions/14763722/python-modulo-on-floats?answertab=active#tab-top –