String.format使用逗号而不是point

时间:2011-12-22 08:11:00

标签: android floating-point android-edittext

我的应用程序目前在许多设备上都没有问题。但是现在我用Android 3.2获得了新的Galaxy Tab,它一直在崩溃。我发现问题是EditText中的浮点数。 我正在使用myEditText.setText(String.format("%.1f", fMyFloat));将float放在EditText中。但不知何故,我的3.2 Galaxy Tab上的浮点数是用逗号而不是点生成的。当我阅读EditText时,应用程序当然崩溃,告诉我这是因为逗号而没有有效的浮动......

这里出了什么问题?

5 个答案:

答案 0 :(得分:18)

将float转换为string ..

来自String.format的文档:

  

<强> String.format(String format, Object... args)

     

使用提供的格式和参数,使用用户的默认语言环境返回本地化格式化字符串。

上面引用的文字意味着String.format的输出将与用户使用的默认语言环境匹配。

作为一个例子,如果一个逗号是使用瑞典语语言环境的用户,则使用逗号作为小数点分隔符,如果使用美国语,则使用一个点。

如果您想强制使用哪个语言环境,请使用接受三个参数的String.format重载:


将字符串转换为float ..

使用默认语言环境将任意字符串解析为浮点数非常简单,您只需使用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));

然后您将用点号格式化字符串