2017-01-11 5 views
2

コンソールにdecimal型を出力しています。私は十進数全体を表示したくないので、必要なデータをユーザが持っているだけです。コンソールディスプレイを使いやすくするための10進数式の書式設定?

問題は、関連する表示精度がプログラムによって大きく異なることにあります。私は小数点以下の桁を表示するだけではわかりません。

この...

916.950000000000045474735088646411895751953125

は...プログラムのために必要な精度が含まれていますが、参照するには、ユーザーのための完全に不要。

代わりに、私は、ユーザーがこれを見たい:

916.95

をしかし、私は同じように簡単に、このかもしれない:

916.95000350000000045474735088646411895751953125

そして、ユーザはこれを見ている必要があります

を916.9500035

Decimal型を表示する前に浮動小数点型に変換すると、必要な表示精度が得られます。しかし、これはさらに多くのプロセッサ時間を追加します。

あなたが使用したい正確にあなたの番号を印刷することができ
+0

何かが見つからない限り、私はそれらの答えがどのように浮動小数点数が同じ10進数であろうと正確さを得るか、または指定されたもの以外の表示精度を得る方法を教えてくれません手動で – Emily

+0

質問に答えることができないと思うなら、私にpingしてください。私はこれをもう一度開くつもりですが、あなたの質問を編集して、なぜそれらの答えがあなたのために働かないのか、他の誰かが来て同じターゲットに再び閉じられるのかを強調したいかもしれません。 –

答えて

1

:あなたはそれを印刷する前に、あなたの番号を丸めるしたい場合は、

print '%.2f' % value 

また:

round (value, 2) 

をこれらの2つの例では、することができます別の数値として '2'を設定し、必要な精度を指定します。

あなたが欲しいの精度がわからない場合、あなたはこれを使用することができ、小数部で印刷される数字の最大の設定:

def print_dec(number, max) : 
    integer = int(number) 
    decimal = str(number-integer)[2:] 
    #Truncate the decimal part to max 
    decimal = decimal[:max] 
    #Remove '0' 
    for c in reversed(decimal) : 
     if c == '0' : 
      decimal = decimal[:-1] 
     else : 
      break; 
    # Reconstruct the number for printing 
    print ("{}.{}".format(integer, decimal)) 

この方法で、あなたが持っているでしょう:

a = 916.95030000 
print_dec (a, 1) 
print_dec (a, 2) 
print_dec (a, 5) 
print_dec (a, 6) 

>> 916.9 
>> 916.95 
>> 916.9503 
>> 916.9503 
+0

このソリューションの問題は、私が表示する必要がある精度がわからないことです。余分な精度を単純に切り捨てる方法があれば、Decimal型が数値に追加されます。それはそれを行うべきです。それはできますか? – Emily

+0

実際には、数字を文字列として使用し、小数部分の最大長を設定することができます。 10番目の値の後にすべてを削除して、最後から保留中の「0」を削除することができます。それは正しいでしょうか? – iFlo

+0

あなたが望む精度が分からない解決策を使って投稿を編集します。 – iFlo

関連する問題