2012-09-12 16 views
5

意見#18、20 controversial programming opinionsPythonの小数点以下の四捨五入

私は考えました。だから私は5小数点以下の桁の値を印刷しようとしました。

私は確かに私は間違いなくPythonでそれを行うことができると思ったので大丈夫だった。 Googleの数秒後に私はDecimal module of Pythonを知ることになった。 私はやった。レストは誰でもPiの価値を得るためにシリーズをまとめることができる基本的なロジックでした。

>>>from decimal import * 
>>>getcontext().prec = 6 
>>>Decimal(22)/Decimal(7) 

私は何を得るかを確認するために上記の簡単なスクリプトを書いています。

しかし、ここには、getcontext().prec = 6が私に丸められた価値を与えました!

>>>3.14286 

正確です。

小数点以下第四位が四捨五入されていないことを確認するにはどうすればよいですか?私はここで答えが欲しいと思ったのです。3.14285

+0

何も小数に丸められていない...そのわずかプリントになります...あなたは '行うことができます "{0:0.6f}"。少なくとも私はテストなしで理解する限り、フォーマット(小数点(22)/小数点(7)) ' –

+0

http://ja.wikipedia.org/wiki/Proof_that_22/7_exceeds_%CF%80 –

+3

@JoranBeasley:あなた絶対に間違っています。 Decimal *は丸めます(または、コンテキストで指定した動作に応じて切り捨てられます)。これが正確さの値です。 '' {:.50f} '。format(Decimal(22)/ Decimal(7)) 'を試して、最後にすべてのゼロを参照してください。 –

答えて

9

Decimalコンテキストを使って精度を指定するのと同じように、丸め規則を指定することもできます。

from decimal import * 

getcontext().prec = 6 
getcontext().rounding = ROUND_FLOOR 

print Decimal(22)/Decimal(7) 

結果が

3.14285 

http://docs.python.org/release/3.1.5/library/decimal.html#decimal.Context

+0

ありがとうございました!私に「フロア」を検索することはありません。 –

+3

この部分のコードのコンテキストのみを変更したい場合は、 'localcontext()をctx:ctx.prec = 6とします。 ctx.rounding = ROUND_FLOOR;小数点(22)/小数点(7) 'が役に立ちます。 – glglgl

関連する問題