intl.NumberFormat 显示 es-ES 货币格式不正确的结果

max*_*c00 7 javascript internationalization

我希望 es-ES 和 de-DE 语言环境的输出相同。(我让我的西班牙同事检查他的工资单,他确认千位后确实有一个小数)

var number = 1000;
console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number));
console.log(new Intl.NumberFormat('es-ES', { style: 'currency', currency: 'EUR' }).format(number));
Run Code Online (Sandbox Code Playgroud)

结果:

> "1.000,00 €"
> "1000,00 €"
Run Code Online (Sandbox Code Playgroud)

小智 6

按照西班牙皇家学院,在西班牙的标准形式是三个一组,用空格隔开的单独号码,如果该号码有多个四位数字,即至少五(来源:https://www.rae.es /dpd/números,第 2.a 节,西班牙语)。

实际上,对于五位数的数字,您的代码为我提供了与de-DEand相同的结果es-ES,即用点分隔:

let number2 = 10000
console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number2));
console.log(new Intl.NumberFormat('es-ES', { style: 'currency', currency: 'EUR' }).format(number2));
Run Code Online (Sandbox Code Playgroud)

给我

10.000,00 €
10.000,00 €
Run Code Online (Sandbox Code Playgroud)

用点分隔似乎不完全正确*,但对四位数字不进行分组似乎符合RAE的语言规则。

* 实际上,同样在德语中,根据 Duden,您应该使用空格而不是点,例如参见https://www.duden.de/sprachwissen/rechtschreibregeln/zahlen-und-ziffern(德语)。