2014-01-15 12 views
6

スウェーデンの通貨が間違った小数点記号を使用していたとのスウェーデンのユーザーからのバグレポートを受け取りました。誤った小数点記号を使用してAndroidで通貨をフォーマットする

NumberFormat enUS = NumberFormat.getCurrencyInstance(Locale.US); 
NumberFormat enGB = NumberFormat.getCurrencyInstance(Locale.UK); 
NumberFormat svSE = NumberFormat.getCurrencyInstance(new Locale("sv", "SE")); 
double cost = 1020d; 
String fmt = "en_US: %s en_GB %s sv_SE %s"; 
String text = String.format(fmt, enUS.format(cost), enGB.format(cost), svSE.format(cost)); 
Log.e("Format", text); 

> Format﹕ en_US: $1,020.00 en_GB £1,020.00 sv_SE 1 020:00 kr 

「1,020,00 kr」と書かれています。フォーマットオブジェクトを調べると、シンボルテーブルに "、"のdecimalSeparatorがあるように見えますが、 ":"の "monetarySeparator"になります。

誰かが知っているかどうか:これはAndroid/javaのバグか回避策のいずれかのバグかどうか、実際には正しいですか?

+0

どのJavaのバージョンをお使いですか? 1.6.0_10では、私の出力は正しいフォーマットを示す 'en_US:$ 1,020.00 en_GB£1,020.00 sv_SE 1 020,00 kr'です。 – ufis

答えて

5

スウェーデン語では、1000区切りは空白で、小数点区切り記号はカンマ "、"通貨記号 "kr"(クロナ)です。したがって、コロン ":"は間違っています。

あなたもここでそれを確認することができます:あなたはhttp://www.localeplanet.com/java/sv-SE/

どのバージョンのJavaを使用していますか?それは私のデスクトップ上にも1.6.0_13

に動作します - アップデート -

Android上でバグがありますが、あなたは、このようなDecimalFormatSymbolsのを使用してバグを回避行くことができるようです:

DecimalFormat svSE = new DecimalFormat("#,###.00"); 
    DecimalFormatSymbols symbols = new DecimalFormatSymbols(new Locale("sv", "SE")); 
    symbols.setDecimalSeparator(','); 
    symbols.setGroupingSeparator(' '); 
    svSE.setDecimalFormatSymbols(symbols); 

これは、Androidでも正しい区切り文字を印刷します。

+0

はい、間違いなくAndroidのバグです。私は同じ効果のためにsymbols.setMonetarySeparator( '、')を使うことができることも発見しました。 – Paul

関連する問題