将 float[] 格式设置为字符串小数符号更改为逗号



float[] to string

当我尝试将浮点数组值转换为字符串时,符号变为逗号?

private float[] myNum = {0.06f, 0.07f, 0.08f};

案例1:

String myString = String.format("%.2f", myNum[0]);

在案例 1 中,myString 为 "0,06">

案例2:

String myString = "" + myNum[0];

在案例 2 中,myString 是 "0.06">

我不明白为什么会发生这种情况。 非常感谢所有的帮助。

这是因为String.format()是区域设置感知的。我猜你的默认语言环境是Locale.GERMAN,因为Locale.NORWEGIAN不存在。小数点分隔符是逗号。

始终使用的区域设置是Locale.getDefault()返回的区域设置。

如果要根据特定的区域设置进行格式设置,则应使用

Locale myLocale = ...;
String.format(myLocale, "%.2f", myNum[0]);

Java 虚拟机在启动期间根据主机环境设置缺省语言环境。如果未显式指定区域设置,则许多区分区域设置的方法都会使用它。可以使用setDefault方法进行更改。您可以轻松检查您的区域设置:System.out.println(Locale.getDefault())

的 format(( 方法在格式化时使用您当前的语言环境。 我的猜测是,您的国家在写十进制数字时使用逗号而不是小数点?

例如,如果用户使用瑞典语区域设置,逗号将用作小数点分隔符,但如果用户使用美国人,则使用点。

上面引用的文本表示 String.format 的输出将与用户使用的默认区域设置匹配。

如果要强制使用哪种区域设置,请使用接受三个参数的 String.format 重载:

String.format (Locale locale, String format, Object... args)

因为String.format(String, Object...)始终应用默认区域设置,而对于默认区域设置,","是浮点数的小数分隔符

要不应用区域设置,请使用带有null区域设置的版本:

private float[] myNum = {0.06f, 0.07f, 0,08f};
...
String myString = String.format((Locale)null, "%.2f", myNum[0]);

myString 是:

0.06

String.format(情况 1(允许您传递一个区域设置,如果未给出,该语言环境将故障转移到操作系统可能提供的默认语言环境(与调用Locale.getDefault()时获得的区域设置相同(。该区域设置使用,作为小数分隔符。

String.toString(这是情况 2 在引擎盖下使用的(,从不这样做 - 它总是使用.作为小数分隔符。

Java不一致的违约行为是它的弱点之一。

最新更新