我的应用程序目前在许多设备上都没有问题。但是现在我用Android 3.2获得了新的Galaxy Tab,它一直在崩溃。我发现问题是EditText中的浮点数。
我正在使用myEditText.setText(String.format("%.1f", fMyFloat));
将float放在EditText中。但不知何故,我的3.2 Galaxy Tab上的浮点数是用逗号而不是点生成的。当我阅读EditText时,应用程序当然崩溃,告诉我这是因为逗号而没有有效的浮动......
这里出了什么问题?
答案 0 :(得分:18)
来自String.format
的文档:
<强> String.format(String format, Object... args) 强>
使用提供的格式和参数,使用用户的默认语言环境返回本地化格式化字符串。
上面引用的文字意味着String.format
的输出将与用户使用的默认语言环境匹配。
作为一个例子,如果一个逗号是使用瑞典语语言环境的用户,则使用逗号作为小数点分隔符,如果使用美国语,则使用一个点。
如果您想强制使用哪个语言环境,请使用接受三个参数的String.format
重载:
使用默认语言环境将任意字符串解析为浮点数非常简单,您只需使用DecimalFormat.parse
。
然后使用.parse
获取Number
并在此返回的对象上调用floatValue
。
答案 1 :(得分:5)
String.format
使用您所在的语言环境。如果您想要一个点,您应该这样做:
NumberFormat formatter = NumberFormat.getInstance(Locale.US);
myEditText.setText(formatter.format(fMyFloat);
查看NumberFormat
了解更多格式选项
答案 2 :(得分:4)
您的Galaxy Tab上的format
电话使用了一些默认Locale
,而,
则使用NumberFormat
作为浮点数。您可以使用具有特定区域设置的String.format(Locale,String,...)
版本来使其工作。
或者你应该使用相同的语言环境来解析和格式化数字。所以你应该使用{{1}}来格式化和解析你的花车。
答案 3 :(得分:4)
使用以下代码,它对我有用:
NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
DecimalFormat df = (DecimalFormat)nf;
df.applyPattern(pattern);
String output = df.format(value);
System.out.println(pattern + " " + output + " " + loc.toString());
答案 4 :(得分:1)
总结以前的答案,这是在所有国家/地区使用点号而不是逗号的简单方法,是这样的:
myEditText.setText(Locale.CANADA, String.format("%.1f", fMyFloat));
然后您将用点号格式化字符串