2014-01-15 50 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,而是「:」的「貨幣選擇器」。

有誰知道是否:實際上是正確的,這是否是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

這就像你的用戶所說:在瑞典千位分隔符是空格「」,小數點分隔符是逗號「,」和貨幣符號「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