3

さて、私の問題は.. NumberFormat クラスの format メソッドを使用して数値を通貨文字列 (例: 10.23 から $10.23) にフォーマットしようとすると、値が自動的に四捨五入されます。これは、日本語/韓国語のロケールを NumberFormat の getCurrencyInstance() メソッドに渡すときに特に発生します。米国ロケールの場合、問題なく動作しています。問題を明確に示すスニペットを次に示します。

        NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.JAPAN);
        BigDecimal bd = new BigDecimal(123.456);
        String str = formatter.format(bd);
        JOptionPane.showMessageDialog(null, str); // Output is coming ¥123 instead of ¥123.456  

何かを見逃しているのか、非論理的なことをしているのかはわかりません。そうでない場合、この丸めを防ぐ方法はありますか? 助けてください。

4

2 に答える 2

4

に設定する必要があるようsetMaximumFractionDigitsですNumberFormat

    NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.JAPAN);
    BigDecimal bd = new BigDecimal(123.456);  
    formatter.setMaximumFractionDigits(4); //Replace 4 with whatever value applicable for you.
    String str = formatter.format(bd);

出力:

¥123.456
于 2012-12-31T18:20:55.890 に答える
2

南張 そうです。これを見てください:

NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.JAPAN);
BigDecimal bd = new BigDecimal(123.456);
String str = nf.format(bd);
System.out.println("" + nf.getMaximumFractionDigits()); //prints out 0
System.out.println(str);

日本のデフォルトの小数桁は 0 に設定されているようです。Locale.US で同じことを行うと、デフォルトで 2 に設定されているようです。ナンバリの回答と setMaximumFractionDigits を使用します。

理由については、コメントで指摘してくれた @Lee Meador に感謝します。

日本円に関するウィキペディアの記事から:

「1953年12月31日 小貨幣処理及び支払端数端数処理法の施行に伴い、1円未満の硬貨は無効となる」

私は韓国の通貨を調べるのが面倒なので、似たような状況にあると思い込んでいます。

于 2012-12-31T19:06:13.047 に答える