我们在Java中发现了一个奇怪的错误。从删除here的人那里猜猜:
en
0.001
cs_CZ
0
花一点时间来猜测这段代码应该返回什么。现在看看它返回的内容:
for (final Locale locale : Locale.getAvailableLocales()) {
final int maximumFractionDigits = NumberFormat.getInstance(locale).getMaximumFractionDigits();
if (maximumFractionDigits != 3) {
System.out.println(locale.getDisplayCountry() + " -> " + maximumFractionDigits);
}
}
是的," 0.001"英语和" 0" (而不是" 0,001")捷克语。那为什么会这样?以下代码给出了提示:
Czech Republic -> 2
Lithuania -> 2
它返回:
maximumFractionDigits
因此,某些原因NumberFormat
是特定于语言环境的。我们和我们的捷克代表都不知道为什么。
除了这个随机行为的所有挫折之外:NumberFormat
的哪些其他字段也是特定于语言环境的,即每次我们需要{{1}}时都必须初始化?
(花了整整一个工作日试图弄清楚这个错误之后,我倾向于问"为什么",但这可能是基于这两种方式的意见。)
PS。我们用不同的Java版本运行程序。由于某种原因,它似乎在更新51和112中工作,但在更新45,131,144,152和161中被破坏.Java 9似乎完全是时髦的。