2016-08-12 18 views
0

私の浮動小数点の精度を制限し、次の演算のための正確な値として使用したいと思いますが、小数点以下のモジュールで何か問題があります。Pythonの小数精度と丸め

from decimal import * 

factor = 350/float(255) 

# Settings 
getcontext().prec = 1 
getcontext().rounding = ROUND_UP 

print Decimal(factor) 

Pythonの出力: 1.372549019607843145962533526471816003322601318359375

期待と望んでいた結果は:1.4 Pythonドキュメントから

+0

は 'np.round'を使用します。 – Julien

+0

'Decimal'オブジェクトを作成するだけでは、現在のコンテキストに丸められません。そのためには、トリックがあります: '+ Decimal(factor)'のように単項プラスを適用できます。これを言っても、これはあなたが望むことをやっていないでしょう: '' prec''は、ポイントの後ろの場所の数ではなく、有効数字の総数を指します。この場合、 'prec = 2'が必要です。 –

+0

'Decimal.quantize'メソッドを調べることもできます。 –

答えて

0

:(https://docs.python.org/2/library/decimal.html

新しい小数点の意義は数のみによって決定されます数字入力。文脈精度と丸めは、算術演算の間にのみとなる。

getcontext().prec = 6 
Decimal('3.0') 
Decimal('3.0') 
Decimal('3.1415926535') 
Decimal('3.1415926535') 
Decimal('3.1415926535') + Decimal('2.7182818285') 
Decimal('5.85987') 
getcontext().rounding = ROUND_UP 
Decimal('3.1415926535') + Decimal('2.7182818285') 
Decimal('5.85988') 

したがって、結果を印刷するときではなく、小数点演算を使用する必要があります。