よろしくお願いいたします。 セントの一部を切り詰めたい理由は本当に分かりません(米国では、韓国や日本ではまったく使用しないので意味があります)。
とにかくセントの部分をカットするのは良い考えではないと思いますが、もしそれをしたいのであれば、NumberFormatをsetMaximumIntegerDigits(int)で使うのと同じくらい簡単です。
私はまだ、リソースバンドルを使用することによって、NumberFormatを使用できないことがわかります。 あなたはまだMessageFormat.format()
にフォーマッタを呼び出すことができます。
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(Locale.US);
currencyFormatter.setMaximumFractionDigits(0);
System.err.println(MessageFormat.format("Some amount: {0}.",
currencyFormatter.format(1d)));
は、予想通り、それが出て印刷します。
いくつかの量の:$ 1。
あなたが通貨を保持する必要がある場合は、私は地元のフォーマットを維持することにより、setCurrency(Currency)
方法でプレイすることをお勧めしたい - あなたはとにかく内在タグでこの質問を求めています。
編集:MessageFormatの機能
に関する情報など、あなたがロケール用のカスタム通貨形式を使用する必要がある場合は、あなたが実際のMessageFormatクラス(通常の静的MessageFormat.format(String, Object...)
は、Webアプリケーションでは動作しませんインスタンス化する必要がありますそれはあなたが好むなら、Javaロケールでデフォルトのロケール - Locale.getDefault(Locale.Category.FORMAT)
を使用しているからです)。
(申し訳ありませんが、メモリ不足)このようになりますヘルパーメソッドを(申し訳ありませんが、ボーナス)書くことですので、あなたが本当にしたいこと:パフォーマンス上の理由から
public static String format(String pattern, Locale locale, Object... args) {
final String emptyPattern = "";
final FieldPosition zero = new FieldPosition(0);
MessageFormat fmt = new MessageFormat(emptyPattern, locale);
StringBuffer buf = new StringBuffer(); // I just love it...
fmt.applyPattern(pattern);
fmt.format(args, buf, zero);
return buf.toString();
}
、あなたは考えるかもしれません一度StringBufferを作成してからそれを一掃してください。しかし、私は自分自身に最適化を残しています。
また、パターンを少し変更する必要があるだろうと私は一瞬に説明しますなぜ:
String pattern = "{1}{0,number,\u00A4#}";
あなたがシンボルとどのようにを配置する金額と通貨記号と翻訳者に委ねを渡す必要がありますロケールのフォーマット値(プロパティファイルにコメントを追加することを忘れないでください!)
JDKのバージョンを使用できない理由は何ですか?ところで、 'NumberFormat.getCurrencyInstance(locale)'を使用できない特別な理由はありますか? –
ICUを使用する理由は2つあります。まず、JDKバージョンでは不可能な異なるロケールで特定の通貨を印刷する必要があります(通貨は現在のロケールで独立している必要があります)。また、ICUには異なるロケールでも印刷する必要のあるスペルアウト書式があります。私のすべてのメッセージはResourceBundleにあるので、私は 'NumberFormat.getCurrencyInstance(locale)'を使用したくありません。 – Marti