为什么 Intl.NumberFormat 在 es-ES 语言环境中将 4 位数字一起格式化?

Raf*_*ero 4 javascript internationalization ecmascript-6

我正在尝试使用Intl.NumberFormat格式化数字。

\n\n

我已经检查了MDN WebDocs,但我无法获得我认为它应该返回的响应。

\n\n

我正在使用西班牙语语言环境进行格式化,并且我想获取千位之间的点分隔符(使用useGrouping选项),但是,我没有得到它

\n\n
    \n
  • 预期结果:1.124,50 \xe2\x82\xac
  • \n
  • 得到的结果:1124,50\xe2\x82\xac
  • \n
\n\n

\r\n
\r\n
var sNumber = \'1124.5\'\r\nvar number = new Number(sNumber);\r\n\r\nlet  style = {\r\n            style: \'currency\',\r\n            currency: "EUR",\r\n            minimumFractionDigits: 2,\r\n            useGrouping: true\r\n        };\r\n\r\nconst formatter = new Intl.NumberFormat("es", style);\r\n\r\nconsole.log(formatter.format(number));
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

Mar*_*tin 5

这似乎是 4 位数字(即 1234.56)的西班牙语格式化程序的一个功能。

\n\n

看一下下面的内容并运行它:

\n\n

\r\n
\r\n
let  style = {\r\n            style: \'currency\',\r\n            currency: "EUR",\r\n            minimumFractionDigits: 2,\r\n            useGrouping: true\r\n        };\r\nvar formatter = new Intl.NumberFormat("es", style);\r\n\r\nconsole.log(\'Spanish (ES)\');\r\nconsole.log(formatter.format(1234.56));\r\nconsole.log(formatter.format(12345.67));\r\nconsole.log(formatter.format(123456.78));\r\n\r\nformatter = new Intl.NumberFormat("de-DE", style);\r\n\r\nconsole.log(\'German (de-DE)\');\r\nconsole.log(formatter.format(1234.56));\r\nconsole.log(formatter.format(12345.67));\r\nconsole.log(formatter.format(123456.78));
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

您将看到,对于 5 位及以上数字,西班牙语格式化程序确实按预期对数字进行了分组。

\n\n

但是,如果您使用德语格式化程序 ( de-DE),它会正确格式化 4 位数字。

\n\n

输出:

\n\n
Spanish (ES)\n1234,56 \xe2\x82\xac\n12.345,67 \xe2\x82\xac\n123.456,78 \xe2\x82\xac\n\nGerman (de-DE)\n1.234,56 \xe2\x82\xac\n12.345,67 \xe2\x82\xac\n123.456,78 \xe2\x82\xac\n
Run Code Online (Sandbox Code Playgroud)\n