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不一致的违约行为是它的弱点之一。