ローカライゼーション(NumberFormat 通貨)難易度 標準無料
次のコードの出力として正しいものを選べ。
1 import java.text.NumberFormat;
2 import java.util.Locale;
3 public class Q10 {
4 public static void main(String[] a) {
5 double v = 1234.56;
6 NumberFormat jp = NumberFormat.getCurrencyInstance(Locale.JAPAN);
7 NumberFormat us = NumberFormat.getCurrencyInstance(Locale.US);
8 System.out.println(jp.format(v));
9 System.out.println(us.format(v));
10 }
11 }- A
¥1,235改行$1,234.56 - B
¥1,234.56改行$1,234.56 - C
JPY1,235改行USD1,234.56 - D
¥1,234改行$1,234.50
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A✓Gold監修
解説
NumberFormat.getCurrencyInstance(locale) はロケールごとの通貨書式を返す。鍵は通貨ごとの「小数桁数(default fraction digits)」が違うこと。
日本円(JPY)の標準小数桁数は 0。よって 1234.56 は小数を四捨五入して整数になり、3桁区切り・円記号を付けて ¥1,235(.56 は切り上げ方向で 1235)。
米ドル(USD)の標準小数桁数は 2。よって 1234.56 はそのまま2桁で $1,234.56。
同じ 1234.56 でも、通貨の小数桁数の違いだけで桁が変わるのがこの問題のポイント。
- B円も小数2桁で出るとした誤り。JPY は小数桁0なので
1234.56→1,235。 - C通貨「記号」ではなく ISO コード(JPY/USD)が出るとした誤り。
getCurrencyInstanceは記号(¥/$)を使う。 - D円を
1,234(切り捨て)かつドルを.50とした誤り。1234.56の四捨五入で円は1,235、ドルは1,234.56。
ひっかけ: ①通貨で小数桁数が違う(JPY=0/USD=2)。②記号は ISO コードでなくロケール記号(
なお、円記号が全角
¥ は全角の円記号 U+FFE5、$)。なお、円記号が全角
¥ か半角 ¥ のどちらで表示されるかは JDK の CLDR ロケールデータに依存するため、実行環境(JDK のバージョン)によって表示グリフが異なる場合があります(例:OpenJDK 21 系では全角 ¥)。実機確認の答え合わせ
出力: ¥1,235 $1,234.56
公式ドキュメント・関連NumberFormat.getCurrencyInstance(Locale)↗Currency.getDefaultFractionDigits()(JPY=0 / USD=2)↗
✓Gold 保有者による書き下ろし解説・実機で検証済