为什么在西班牙地区语言环境下,Intl.NumberFormat会将4个数字一起格式化?

4
我正在尝试使用Intl.NumberFormat格式化数字。
我已经查看了MDN WebDocs,但我没有得到我猜测它应该返回的响应。
我正在使用西班牙语区域设置进行格式化,并希望获取千位分隔符(使用useGrouping选项),但是我没有得到它。
期望结果:1.124,50 €
获得的结果:1124,50 €

var sNumber = '1124.5'
var number = new Number(sNumber);

let  style = {
            style: 'currency',
            currency: "EUR",
            minimumFractionDigits: 2,
            useGrouping: true
        };

const formatter = new Intl.NumberFormat("es", style);

console.log(formatter.format(number));


对我来说,一切都像预期的那样运作良好。 - Andreas
这按预期工作。在西班牙语环境中,您应该写1124.50欧元,但是11,124.50欧元。如果只有2个组,并且第一个组只有一个成员,则不使用分组分隔符。 - Joachim Sauer
1个回答

5
这似乎是西班牙格式化程序针对4位数值(例如1234.56)的一种特性。
请查看以下内容并运行它:

let  style = {
            style: 'currency',
            currency: "EUR",
            minimumFractionDigits: 2,
            useGrouping: true
        };
var formatter = new Intl.NumberFormat("es", style);

console.log('Spanish (ES)');
console.log(formatter.format(1234.56));
console.log(formatter.format(12345.67));
console.log(formatter.format(123456.78));

formatter = new Intl.NumberFormat("de-DE", style);

console.log('German (de-DE)');
console.log(formatter.format(1234.56));
console.log(formatter.format(12345.67));
console.log(formatter.format(123456.78));

你会发现,对于5位数及以上的数字,西班牙格式化程序确实按预期进行了分组。
然而,如果使用德语格式化程序(de-DE),它会正确地格式化4位数。
输出:
Spanish (ES)
1234,56 €
12.345,67 €
123.456,78 €

German (de-DE)
1.234,56 €
12.345,67 €
123.456,78 €

如果这是正确的,那就意味着亚马逊西班牙网站在将1099写成1.099时显示有误。https://www.amazon.es/s?k=macbook+pro - Rajiv
这里的重点是,西班牙机构“RAE”规定,不应在4位整数数字中使用组分隔符→ https://www.rae.es/dpd/n%C3%BAmeros - laconbass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接