Java 带有区域设置的数字格式提供了错误的输出

Java 带有区域设置的数字格式提供了错误的输出,java,numbers,locale,Java,Numbers,Locale,我要挪威货币格式。我的代码是 NumberFormat numberFormat = NumberFormat.getNumberInstance(new Locale("no","NO")); System.out.println(numberFormat.format(188800.99)); 它给出了188800,99的输出。但挪威的数字模式是188.800,99 我认为特定国家的模式没有在官方文件/标准中定义。在您提供的链接中,挪威的正确格式确实是188.800,99,

我要挪威货币格式。我的代码是

NumberFormat numberFormat = NumberFormat.getNumberInstance(new Locale("no","NO"));
        System.out.println(numberFormat.format(188800.99));
它给出了188800,99的输出。但挪威的数字模式是188.800,99

我认为特定国家的模式没有在官方文件/标准中定义。在您提供的链接中,挪威的正确格式确实是188.800,99,但当我查看它时,它说188 800,99将是挪威的正确格式

作为一种解决方案,您可以搜索适合您需要的
NumberFormat
,也可以创建自己的格式,如下所示:

DecimalFormat numberFormat = new DecimalFormat("#,##0.00");
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(',');
decimalFormatSymbols.setGroupingSeparator('.');
numberFormat.setDecimalFormatSymbols(decimalFormatSymbols);
System.out.println(numberFormat.format(1881212800.9));

它将数字打印为
1.881.212.800,90
。在模式
#,##0.00
中,散列表示可选数字和所需数字的零。在这种情况下,逗号左边至少有一个数字,右边至少有两个。

我认为文档不正确。如果我使用德语语言环境,它实际上会输出您所需的输出。作为千位分隔符而不是空格,这与文档声称的应该是不同的。但这正是我所期望的,因为我从很久以来就在Java代码中使用NumberFormat for German Locale,而且我从未见过它像文档中所说的那样生成带有1000个分隔符的输出。@哦,我想说,文档是非常奇怪的。据我所知,它是Solaris系统或类似系统的文档,与Java及其NumberFormat实现无关。这是我在谷歌上搜索挪威数字格式时出现的第一件事,但我不确定它有多可靠。没有“no_no”区域设置(或)。正确的选项是
nb\u NO
nn\u NO
,具体取决于您想要的选项。2.CLDR(这是数据的来源)将随着时间的推移而变化,以更准确地表示当前的写作状态,因此,结果现在可能是正确的(但我不是挪威人,因此我无法证实或否认这一点)。检查CLDR调查工具