我有一个在启动时运行以下两行代码的应用程序:
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
是什么,这没有帮助。)