2017-04-20 7 views
0

私は特定の方法のように見えるように数値を書式化しようとしています。特定の形式と2つの小数点以下を持つ二重

だから、私は数1007,2のように持っている、と私はそれが必要な1 007,20

この二つの要因があるように見えるようにしたい:

  • 何千人ものフォーマット
  • 小数点以下2桁

私は千フォーマットを設定するコードを持っています:

Double total_value = Double.valueOf(1007,2); 

String formatedValue = NumberFormat.getNumberInstance(Locale.CANADA_FRENCH).format(total_value); 

されて出力される: 1 007,2€

そして、私は2つの小数点以下のコードを持っている:

Double total_value = Double.valueOf(1007,2); 

String formatedValue = String.format("%.2f", total_value); 

問題はこの2を使用するための、ありますそれらのうちの2つがStringを返し、両方がDoubleでフォーマットするための値を受け取る必要があるため、常に問題を抱くようになります。

文字列に文字列を受け取った場合、文字列をdoubleに変換しようとすると、String value = Double.parseDouble(formatedValue);またはString value = Double.valueOf(formatedValue)のように常にエラーが発生します。私は既にDecimalFormatを試しましたが、それもStringを返します。

私は一緒に働く2つの方法を共役する方法を知りません!

あなたが任意のアイデアを持っている場合は、それをコメントしてください:)

+0

数値と小数部分を別々に扱い、結果を連結してみましたか(小数点の最初の2文字を削除しましたか)。 – Anis

+0

'Double.valueOf(1007,2);'はコンパイルされません。あなたの意図を推測することはできますが、質問に実際のコードをコピー/貼り付けることが最善です。 – slim

答えて

3

あなたはNumberFormatString.format()を結合する必要はありません。

- (Javadocを参照してください、あなたのニーズに応じて、そしておそらく setMaximumFractionDigits()など)

NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.CANADA_FRENCH); 
    numberFormat.setMinimumFractionDigits(2); 

    assertThat(numberFormat.format(1007.2), is("1 007,20")); 

:あなたは、さらに2小数点以下を使用するためにそれを伝えるために、あなたのNumberFormatオブジェクトを設定することができ


注意 - NumberFormat.format()はスレッドセーフではありません。


別の方法としては、String.format(locale, format, args)を使用することができます。

assertThat(String.format(Locale.CANADA_FRENCH, "%,.2f", 1007.2), is("1 007,20")); 

形式で,フラグは、何千もの区切りを使用するフォーマッタを伝え、ロケールがセパレータはスペースであるということを伝えます。私はこれをテストしていない、そしてそれは本当にきれいではありませんが、私は英語の形式の類似した何かを使用しています

String[] splitter = formatedValue.split("\\,"); 
int decimalDigits = 0; 
if (splitter.length > 1) { 
    formatedValue = splitter[1].length(); 
} else { 
    formatedValue += ","; 
} 
for (int i = 0; i < 2 - decimalDigits; i++) { 
    formatedValue += "0"; 
} 

:あなたのようないろいろ書いを行うことができ千の形式を設定した後

+0

最初のオプションが本当にうまくいっています!ありがとうございます。 –

0

10進数が2桁であることを確認するには、最初に合計値を丸める必要があります。

関連する問題