Android的欧洲版本的NumberFormatException?

Joh*_*rts 3 java double android decimal number-formatting

我有一个应用程序在启动时运行以下两行代码:

DecimalFormat decim = new DecimalFormat("#.00");
return Double.parseDouble(decim.format(totalNumberOfCredits));
Run Code Online (Sandbox Code Playgroud)

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

但是,在我的Google 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)
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 7

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

是的,一点没错.毕竟,这就是它的意图:

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

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

请注意,这不是"欧洲版Android"的问题 - 只是在默认语言环境,用作小数分隔符的上下文中使用Android .

如果要使用特定区域设置的符号,但使用特定模式,则可以使用:

DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.US);
DecimalFormat format = new DecimalFormat("#.00", symbols);
Run Code Online (Sandbox Code Playgroud)

话虽如此,你一开始并不清楚你想要做什么 - 你为什么要格式化然后解析一个数字呢?当你真的不需要它时,你几乎应该总是避免字符串转换.为什么不直接转换呢?(我们不知道是什么totalNumberOfCredits,哪些没有帮助.)