2013-12-09 3 views
5

でもゼロで小数点以下を保ちます他の人にとってはそれはありません。どうすればこの問題を解決できますか?のJava常に<code>DecimalFormatter</code>を使用して、数字がゼロであっても、その後場合、私は2つの小数点以下を維持しようとしています

+0

あなたが機能しなかった例を与えることができますか? – SudoRahul

+1

本当ですか?私は "#0.00"を私の書式文字列に使用しますが、これはうまくいくはずです。あなたが実際に上記のコードを実行しているのではないかと思う。 –

+0

おそらく 'Double.valueOf'を行っているからです。しかし、ちょうど推測です。 –

答えて

4

DecimalFormatDouble.valueOfを使用していて、フォーマットされた数値をdoubleに変換しているため、末尾の0は削除されているためです。あなたが値を表示するあるときDecimalFormatを使用するだけで、この問題を解決するには

m_interestの計算が必要な場合は、通常のdoubleのままにしてください。

次に表示する、使用:

System.out.print(df.format(m_interest)); 

例:

DecimalFormat df = new DecimalFormat("#.00"); 
double m_interest = 1000; 
System.out.print(df.format(m_interest)); // prints 1000.00 
+0

しかし、私は二重として価値を送る必要があります。ここで、df.format()の出力は文字列型です。 どういうわけか、10.0の代わりに10.0の値を二重に送ることができますか?または私は全くできない? –

+0

@ChandraBhanSinghそれは本当に意味をなさない。 doubleは数値です。後続のゼロを持つようにはフォーマットされていません。数値を何らかの形で印刷する必要がある場合は、その前に 'df.format()'を使います。番号を印刷するだけでなく、10進数のままにすることもできます。あなたはどんな状況ですか? –

+0

私のプロジェクトでは、double値が4精度であることを明示的に述べた文書から署名しました。今クライアントは小数点以下4をゼロにしたいと思うように、私は本当にこれを達成する方法が混乱しています。あなたがキャッチーな陳述を私に伝えることができればと感謝します。だから私は彼にこれについて納得させることができます。 JAX-WS Webサービスでこれらの値を送信しています。 –

2

BigDecimalを代わりに使用してください。これは、求める書式設定手法をサポートしています。

この質問はそれを詳細:How to print formatted BigDecimal values?

+1

ああ、オーバーヘッドはありますか?それは何ですか?あなたがお金を稼いでいるなら、BigDecimalはあなたがそれをやる方法です。 – Rob

+1

申し訳ありませんが、あなたは正しいです。すべての財務計算はBigDecimalで行う必要があります。私は以前のコメントを撤回します。もう一度、申し訳ありません。 1+ –

+1

@Robが指摘しているように、BigDecimalを使用してください。これは、使用可能な書式のためではなく、無限の精度を使用するためです。Doubleは金銭計算のために望ましくない丸めを受けます。 – GreyBeardedGeek

3

のDecimalFormat のNumberFormatはうまく動作するはずです。

import java.text.DecimalFormat; 
import java.text.NumberFormat; 

public class Foo { 
    public static void main(String[] args) { 
     DecimalFormat df = new DecimalFormat("#0.00"); 

     NumberFormat nf = NumberFormat.getInstance(); 
     nf.setMinimumFractionDigits(2); 
     nf.setMaximumFractionDigits(2); 

     NumberFormat cf = NumberFormat.getCurrencyInstance(); 

     System.out.printf("0 with df is: %s%n", df.format(0)); 
     System.out.printf("0 with nf is: %s%n", nf.format(0)); 
     System.out.printf("0 with cf is: %s%n", cf.format(0)); 
     System.out.println(); 
     System.out.printf("12345678.3843 with df is: %s%n", 
      df.format(12345678.3843)); 
     System.out.printf("12345678.3843 with nf is: %s%n", 
      nf.format(12345678.3843)); 
     System.out.printf("12345678.3843 with cf is: %s%n", 
      cf.format(12345678.3843)); 
    } 
} 

これでしょう出力:通貨インスタンスは、より良いを仕事ができる

0 with df is: 0.00 
0 with nf is: 0.00 
0 with cf is: $0.00 

12345678.3843 with df is: 12345678.38 
12345678.3843 with nf is: 12,345,678.38 
12345678.3843 with cf is: $12,345,678.38 
-1

なぜあなただ​​けで恐らくMath.round(値* 100)/ 100.0のですか?

+0

これはまさに彼の問題です。彼は後ろの0を表示する必要があります。丸めればそれらは排除されます。これはまた答えではない、それは質問だから、コメントでなければならない。 –

+0

申し訳ありませんが、私はダブルとは思わない。valueOf()はそれらの0を気にしています。したがって、私はフォーマットの手間をかけるのは大変だと思います。 – pinxue

+0

はい、 'Double.valueOf()'が彼の問題です。それが彼のために解決しようとしていることです。彼の質問をお読みください。 –

0
m_interest = Double.valueOf(String.format("%.2f", sum)); 
+2

このコードは疑問に答えるかもしれませんが、他の人を紹介せずに問題を解決し、それを使用する方法を説明する方が良いでしょう。コードのみの回答は長期的には有用ではありません。 –

関連する問題