2017-03-12 5 views
1

モジュラス演算子を使用していますが、浮動小数点エラーが発生します。例えば、モジュラス浮動小数点エラーを回避する方法は?

>>> 7.2%3 
1.2000000000000002 

round機能を使用してこれを処理するための私の唯一の頼みの綱ですか?例えば。

>>> round(7.2%3, 1) 
1.2 

私は先験的には桁数が、私はへのラウンドする必要がするつもりですので、よりよい解決策があります場合、私は思ったんだけど知りませんか?

+0

'decimal.Decimal'の使用を検討しますか? – Marii

+0

浮動小数点数は正確な値ではありません。 '' 7.2''を書いた瞬間、プログラムに不正確さが導入されました。あなたのプログラムが1兆分の1パーセントの誤差で生きていけない場合は、小数または合理的なデータ型を使用する必要があります。 – jasonharper

+0

私はこれがここで答えられたと思います。数学は変だから。 http://stackoverflow.com/questions/14763722/python-modulo-on-floats?answertab=active#tab-top –

答えて

3

あなたが任意の精度が必要な場合は、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') 
>>> 
+0

だから私は ''数値 ''にそれらを渡す前に 'str()'を確認する必要があります。とった。ありがとう! – wogsland

+0

@wogsland自動的に丸められる 'str'には注意が必要ですが、浮動小数点エラーは丸めに入る可能性があります。可能であれば文字列リテラルを使用してください。 –

関連する問題