Android String.format使用逗号而不是点

Android String.format使用逗号而不是点,android,floating-point,android-edittext,Android,Floating Point,Android Edittext,到目前为止,我的应用程序可以在许多设备上正常运行。但现在我有了安卓3.2的新Galaxy标签,它一直在崩溃。我发现问题是EditText中的浮点。 我使用的是myEditText.setText(String.format(“%.1f”,fMyFloat))将浮点置于编辑文本中。但不知何故,我的3.2 Galaxy选项卡上的浮动是用逗号而不是点生成的。当我读回EditText时,应用程序当然崩溃了,告诉我这是无效的浮点,因为逗号 这里出了什么问题?将浮点转换为字符串。。 从String.form

到目前为止,我的应用程序可以在许多设备上正常运行。但现在我有了安卓3.2的新Galaxy标签,它一直在崩溃。我发现问题是EditText中的浮点。 我使用的是
myEditText.setText(String.format(“%.1f”,fMyFloat))
将浮点置于编辑文本中。但不知何故,我的3.2 Galaxy选项卡上的浮动是用逗号而不是点生成的。当我读回EditText时,应用程序当然崩溃了,告诉我这是无效的浮点,因为逗号

这里出了什么问题?

将浮点转换为字符串。。 从
String.format
的文档中:

使用提供的格式和参数,使用用户的默认区域设置,返回本地化的格式化字符串

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

例如,如果用户使用瑞典语言环境,逗号将用作小数点分隔符;如果用户使用美国语言环境,逗号将用作点分隔符

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


将字符串转换为float。。 使用默认语言环境将任意字符串解析为浮点非常容易,只需使用


然后使用获取并调用此返回对象。

String。format
使用您所在的区域设置。如果你想要一个点,你应该这样做:

NumberFormat formatter = NumberFormat.getInstance(Locale.US);
myEditText.setText(formatter.format(fMyFloat);

查看更多格式选项

您的Galaxy选项卡上的
格式
调用使用了一些默认的
区域设置
,这些区域设置反过来使用
进行浮动。您可以使用具有特定区域设置的版本来实现这些功能


或者您应该使用相同的语言环境来解析和格式化数字。因此,您可能应该使用
NumberFormat
来格式化和解析浮点数。

使用下面的代码它对我有用:

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());

总结前面的答案,在所有国家使用点而不是逗号的简单方法是:

myEditText.setText(Locale.CANADA, String.format("%.1f", fMyFloat));

您将使用点对字符串进行格式化

可能是语言环境问题。请从Galaxy选项卡的设置中将您的语言环境更改为其他语言环境,然后重试…调用
字符串。format
也是一个很好的选择。事实上,您可以将其与区域设置一起使用为
null
,如果您不需要它,则可以忽略该区域设置;)