対策する資格
Java Silver ・ 近日ORACLE Silver ・ 近日
Gold 保有者 監修1Z0-829 対応
ローカライゼーション(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  }
  1. A¥1,235 改行 $1,234.56
  2. B¥1,234.56 改行 $1,234.56
  3. CJPY1,235 改行 USD1,234.56
  4. D¥1,234 改行 $1,234.50
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AGold監修

解説

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.561,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
Gold 保有者による書き下ろし解説・実機で検証済
この分野をもっと解いて、得点源に
ローカライゼーション を含む全問を分野別に演習できます(無料)。
演習する →