2012-01-07 15 views
0

Pythonの任意の精度の小数は素敵ですが、きれいに書式設定された方法で印刷する方法を見つけることができません。私は次の式を計算する場合たとえば、:それが必要のようPythonの書式付き任意精度小数点の印刷

>>> pow(2,70) -2 
1180591620717411303422L 

それは、2で終わります。しかし、小数点以下2桁を表示するようにフォーマットしようとすると、浮動小数点数があまり正確でないため、2^70に丸められます。

>>> print "{0:.2f}".format(pow(2,70) -2) 
1180591620717411303424.00 

精度を損なうことなく、必要な書式で印刷する方法はありますか?
(および、そのようなnumpyのよう任意の非標準モジュールを使用せずに)

+2

私はそれを取得しません。小数点以下の桁数の整数を出力したいですか?どうして? 'print '{} .00" .format(pow(2,70) - 2) 'はどうでしょうか?あなたの場合、小数点以下の桁数は常に.00です。 –

+0

? – joaquin

+0

計算の結果を小数点以下の桁数で出力したい場合、その計算で分数値が返されることがあります。この例では整数を使用していたのは、問題を示すのに十分な大きさの簡単な数値だったからです。 – sapphiremirage

答えて

5

これが私の作品:decimalモジュールのドキュメントから

>>> import decimal 
>>> '{0:.2f}'.format(decimal.Decimal((pow(2,70)-2))) 
1180591620717411303422.00 

decimalモジュールは小数点のサポートを提供浮動小数点演算。 [...] 10進数は正確に表すことができます。

+0

私はそれを試したと思っていましたが、うまくいかなかったのですが、私はまだ(pow(2,70)+ .75)のようなものでは動作させることができませんが、これは理論的なケース(少なくともこれまで)であり、私はそれを心配する必要はありません。 – sapphiremirage

+0

@sapphiremirageその場合、他の操作の前に 'decimal'に変換する必要があります:' decimal.Decimal(pow(2,70))+ decimal.Decimal(0.75) ' – jcollado

関連する問題