当我尝试将float数组值转换为字符串时,符号会变为逗号?
private float[] myNum = {0.06f, 0.07f, 0.08f};
案例1:
String myString = String.format("%.2f", myNum[0]);
在Case1中,myString是" 0,06"
案例2:
String myString = "" + myNum[0];
在案例2中,myString是" 0.06"
我不明白为什么会这样。 非常感谢所有帮助。
答案 0 :(得分:0)
Locale.getDefault()
(案例1)允许您传递区域设置,如果没有给出,它将故障转移到操作系统可能提供的默认区域(与您相同)如果你打电话给,
)。该语言环境使用String.toString
作为小数点分隔符。
.
(这是2使用的情况),从来没有这样做 - 总是使用new Ivory\CKEditorBundle\IvoryCKEditorBundle(),
new Knp\Bundle\MarkdownBundle\KnpMarkdownBundle(),
new Sonata\FormatterBundle\SonataFormatterBundle(),
作为小数点分隔符。
Java不一致的违约行为是其缺点之一。
答案 1 :(得分:0)
这是因为String.format()
是区域设置感知的。我猜测您的默认语言区域为Locale.GERMAN
,因为Locale.NORWEGIAN
不存在。小数点分隔符是逗号。
始终使用的语言环境是
Locale.getDefault()
返回的语言环境。
如果要根据特定区域设置进行格式化,则应使用
Locale myLocale = ...;
String.format(myLocale, "%.2f", myNum[0]);
Java虚拟机根据主机环境在启动期间设置默认语言环境。如果未明确指定语言环境,则许多语言环境敏感方法使用它。可以使用setDefault
方法更改它。您可以轻松检查您的语言区域:System.out.println(Locale.getDefault())
。
答案 2 :(得分:0)
因为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
答案 3 :(得分:0)
format()方法在格式化时使用当前的Locale。 我的猜测是,你的国家在写十进制数字时使用逗号而不是小数点?
答案 4 :(得分:0)
As an example a comma would be used as the decimal-point-delimiter if user using Swedish locale, but a dot if it's using an American.
The quoted text above means that the output of String.format will match the default locale the user uses.
If you'd like to force what locale is going to be used, use the overload of String.format that accepts three parameters:
String.format (Locale locale, String format, Object... args)