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

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

当我在美国手机上启动应用程序时,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)

真的有可能DecimalFormat在欧洲电话上产生小数的逗号版本吗?

最佳答案

真的有可能DecimalFormat在欧洲电话上产生小数的逗号版本吗?

是的,一点没错。毕竟是meant to do:

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

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

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

如果要对特定语言环境使用符号,但要使用特定模式,则可以使用:

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

话虽这么说,但一开始并不清楚您要做什么-为什么要格式化然后解析一个数字?当您实际上不需要字符串转换时,几乎应该始终避免使用它们。为什么不直接转换呢? (我们不知道totalNumberOfCredits是什么,这没有帮助。)

09-25 22:30