0

各通貨のロケール パターンを表示する Java 関数を作成しました。以下の関数を参照してください。私が知りたいのは、通貨が CHF の場合、小数点以下 2 番目が 5 にハードコードされているのはなぜですか? icu パッケージを使用しており、この問題は java.util.Currency パッケージには存在しないことに注意してください。en_US のデフォルト ロケールを使用しています。USD および CHF 通貨に関連する関数の出力は次のとおりです。

Analyzing currency: [USD] localePattern: [¤#,##0.00;(¤#,##0.00)] Currency symbol [$]
Analyzing currency: [CHF] localePattern: [¤#,##0.05;(¤#,##0.05)] Currency symbol [SwF]

私が書いたJava関数は次​​のとおりです。

import com.ibm.icu.text.DecimalFormat; 
import com.ibm.icu.text.NumberFormat;
import com.ibm.icu.util.Currency;

public static void main(String[] args)
  {
    Currency configuredCurrency                       = null; 
    NumberFormat formatter                = NumberFormat.getCurrencyInstance();
    DecimalFormat localeCurrencyFormatter = (DecimalFormat)formatter;
    String localePattern                  = "";
    String symbol                         = "";

    String currencies        = "AED,AFN,ALL,AMD,ARS,AUD,BGN,BHD,BND,BOB,BRL,BWP,BYR,CAD,CHF,CLP,CNY,COP,CRC,CZK,DJF,DKK,DOP,DZD,EEK,EGP,ERN,ETB,EUR,GBP,GTQ,HKD,HNL,HRK,HUF,IDR,ILS,INR,IQD,IRR,ISK,JOD,JPY,KES,KPW,KRW,KWD,KZT,LBP,LTL,LVL,LYD,MAD,MKD,MTL,MXN,MYR,NIO,NOK,NZD,OMR,PAB,PEN,PHP,PKR,PLN,PYG,QAR,RON,RUB,SAR,SDD,SEK,SGD,SKK,SOS,SVC,SYP,SwF,THB,TND,TRY,TZS,UAH,USD,UYU,VEB,VND,YER,ZAR,ZWD";
    String[] currenciesArray = currencies.split(",");

    for (int i = 0; i < currenciesArray.length; i++)
    {
      String currency = currenciesArray[i];
      configuredCurrency = Currency.getInstance(currency);
      localeCurrencyFormatter.setCurrency(configuredCurrency);
      localePattern = localeCurrencyFormatter.toPattern();
      symbol = localeCurrencyFormatter.getCurrency().getSymbol();

      System.out.println("Analyzing currency: [" + currency + "] localePattern: [" + localePattern + "] Currency symbol [" + symbol + "]");
    } 
  }
4

3 に答える 3

3

5 は丸めの増分です (スイス フランの 0.01 はありません。0.05 は最も価値の低いコインです (スイス フラン ウィキペディア))。

また、icu4j DecimalFormat javadocから:

「'0' の代わりに、'1' から '9' までの数字を使用して、丸めの増分を示すことができます。」

于 2013-01-08T17:46:41.247 に答える
1

'5' は、文字列形式に変換するときに数値を最も近い 5/100 に丸める方法について特別な規則があることを ICU パッケージに伝えます。

"スイスでは、5 サンチームが支払取引の最小通貨単位です。したがって、スイスの会社コードと通貨スイス フランの場合は、5 を入力します。"

SAP ヘルプ Web サイト

于 2013-01-08T17:44:49.857 に答える
1

助けてくれてありがとう。やっと答えを見つけることができました。私はこのコードを書き、トリックを行いました:

localeCurrencyFormatter.setRoundingIncrement(new BigDecimal("0"));
于 2013-01-09T08:01:54.533 に答える