使用错误的小数点分隔符在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中的错误还是任何forms的解决方法?

这就像你的用户说:瑞典千分隔符是空格“”,小数分隔符是逗号“,”和货币符号“kr”(克朗)。 所以冒号“:”绝对是错误的。

你也可以在这里查看: http : //www.localeplanet.com/java/sv-SE/

您使用的Java版本是什么? 它在我的桌面1.6.0_13上运行良好

– 更新 –

似乎在Android上有一个bug,但你可以通过使用像这样的DecimalFormatSymbols解决这个问题:

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

这也会在Android中打印正确的分隔符。