format float[] to String 小数点符号变为逗号

format float[] to String decimal sign changes to comma

浮动[]到字符串

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

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

案例 1:

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

在案例 1 中,myString 是“0,06”

案例二:

    String myString = "" + myNum[0];

在案例 2 中,myString 是“0.06”

我不明白为什么会这样。 非常感谢所有帮助。

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

String.toString(这是案例 2 在幕后使用的情况),从不这样做 - 它 总是 使用 . 作为小数点分隔符.

Java 不一致的默认行为是其弱点之一。

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

The locale always used is the one returned by Locale.getDefault().

如果你想根据特定区域设置格式,那么你应该使用

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

Java 虚拟机根据主机环境在启动期间设置默认语言环境。如果没有明确指定语言环境,它会被许多语言环境敏感的方法使用。可以使用 setDefault 方法更改它。您可以轻松检查您的语言环境:System.out.println(Locale.getDefault()).

因为 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

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

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

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

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

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