2014-02-08 106 views
3

我有在启动时运行的代码如下两行的应用程序:欧洲版Android版NumberFormatException?

DecimalFormat decim = new DecimalFormat("#.00"); 
return Double.parseDouble(decim.format(totalNumberOfCredits)); 

当我开始我的美国手机上的应用程序中,decim.format(totalNumberOfCredits).00

然而,在我的谷歌Play开发者控制台,我有一打崩溃,所有这一切看起来就像这样:

Caused by: java.lang.NumberFormatException: Invalid double: ",00" 
at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
at java.lang.StringToReal.parseDouble(StringToReal.java:269) 
at java.lang.Double.parseDouble(Double.java:295) 

难道真的有可能是DecimalFormat的是生产小数点的欧洲手机逗号版本?

+0

[“警惕的默认语言环境的”(http://developer.android。 com/reference/java/util/Locale.html#default_locale) – zapl

+0

我将我的格式字符串放在我的Strings.xml中。所以我可以为每种语言定制它。 –

回答

7

DecimalFormat是否真的可能在欧洲手机上生成小数点的逗号版本?

是的,绝对。这就是它的meant to do,毕竟:

使用给定模式和默认语言环境的符号创建DecimalFormat。当国际化不是主要关注点时,这是获取DecimalFormat的便捷方式。

要获取给定语言环境的标准格式,请使用NumberFormat上的工厂方法,例如getNumberInstance。这些工厂将为给定的语言环境返回最合适的NumberFormat子类。

请注意,这不是一个“欧洲版本的Android”的问题 - 它只是一个在默认的语言环境使用,作为小数点分隔符的上下文采用Android的问题。

如果你想使用的符号特定的语言环境,但使用一个特定的模式,你可以使用:

DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.US); 
DecimalFormat format = new DecimalFormat("#.00", symbols); 

话虽如此,它不是完全清楚你想要做什么第一个地方 - 为什么你会格式化然后解析一个数字?当你不需要它们时,你应该几乎总是避免字符串转换。为什么不直接转换它? (我们不知道totalNumberOfCredits是什么,这没有帮助。)

0

double unit = Float.parseFloat(String); DecimalFormat decimal = new DecimalFormat(“##。###”)。format(unit);

试试这个它帮助我在我的项目

+0

其实你解析,在你的字符串,不能转换第一个string.replace(“,”,“”),然后使用它将工作得很好 – 2014-02-08 13:59:46

2
public double getTwoPointDecimal(double value) {   
      DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);  
      return Double.parseDouble(new DecimalFormat("##.##", symbols).format(value)); 
    } 

尝试它,它帮助我在我的项目