17

INR 形式の通貨を次のように印刷しようとしています。

NumberFormat fmt = NumberFormat.getCurrencyInstance();
fmt.setCurrency(Currency.getInstance("INR"));
fmt.format(30382.50);

を示していますRs30,382.50が、インドでは次のように書かれていますRs. 30,382.50( http://www.flipkart.com/を参照) INR をハードコーディングせずに解決する方法は?

4

5 に答える 5

7

ちょっとしたハックですが、非常によく似た状況で、このようなものを使用しました

NumberFormat format = NumberFormat.getCurrencyInstance(new Locale("en", "in"));
String currencySymbol = format.format(0.00).replace("0.00", "");
System.out.println(format.format(30382.50).replace(currencySymbol, currencySymbol + " "));

私が扱わなければならなかったすべての通貨は、小数点以下 2 桁までだったので、すべての通貨を扱うことができまし"0.00"た。ありNumberFormat.getCurrency().getSymbol()ます。INRただし、代わりに返さRs.れるため、通貨記号の取得には使用できません。

于 2011-07-12T20:28:06.257 に答える
5

これが機能するかどうかを確認します。

DecimalFormat fmt = (DecimalFormat) NumberFormat.getInstance();
fmt.setGroupingUsed(true);
fmt.setPositivePrefix("Rs. ");
fmt.setNegativePrefix("Rs. -");
fmt.setMinimumFractionDigits(2);
fmt.setMaximumFractionDigits(2);
fmt.format(30382.50);

編集:最初の行を修正しました。

于 2011-07-12T20:11:05.423 に答える
3

より簡単な方法、一種の回避策。私のロケールでは、通貨記号は「R$」です

public static String moneyFormatter(double d){

    DecimalFormat fmt = (DecimalFormat) NumberFormat.getInstance();
    Locale locale = Locale.getDefault();
    String symbol = Currency.getInstance(locale).getSymbol(locale);
    fmt.setGroupingUsed(true);
    fmt.setPositivePrefix(symbol + " ");
    fmt.setNegativePrefix("-" + symbol + " ");
    fmt.setMinimumFractionDigits(2);
    fmt.setMaximumFractionDigits(2);
    return fmt.format(d);
}

入力:

moneyFormatter(225.0);

出力:

"R$ 225,00"
于 2016-11-09T01:12:02.443 に答える
2

これを行う簡単な方法はわかりません。これが私が思いついたものです...

実際の通貨記号を取得するための鍵は、宛先ロケールをCurrency.getSymbolに渡すことのようです。

currencyFormat.getCurrency().getSymbol(locale)

これは、ほとんど機能しているように見えるコードです。

public static String formatPrice(String price, Locale locale, String currencyCode) {

    NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(locale);
    Currency currency = Currency.getInstance(currencyCode);
    currencyFormat.setCurrency(currency);

    try {
        String formatted = currencyFormat.format(NumberFormat.getNumberInstance().parse(price));
        String symbol = currencyFormat.getCurrency().getSymbol(locale);

        // Different locales put the symbol on opposite sides of the amount
        // http://en.wikipedia.org/wiki/Currency_sign
        // If there is already a space (like the fr_FR locale formats things),
        // then return this as is, otherwise insert a space on either side
        // and trim the result
        if (StringUtils.contains(formatted, " " + symbol) || StringUtils.contains(formatted, symbol + " ")) {
            return formatted;
        } else {
            return StringUtils.replaceOnce(formatted, symbol, " " + symbol + " ").trim();
        }
    } catch (ParseException e) {
        // ignore
    }
    return null;
}
于 2012-01-25T00:21:53.967 に答える
1

私はあなたができるとは思わない。

http://site.icu-project.org/をご覧ください。

icu4j によって提供される、より適切なロケール固有の通貨フォーマットが存在する可能性があります。

于 2011-07-12T20:28:46.373 に答える