如何使用 Intl.NumberFormat 设置分隔符从 1,000 开始而不是 10,000 的数值格式?

问题描述 投票:0回答:2

我有以下功能:

formatNumericValues() {
    const numberFormat = new Intl.NumberFormat('es', {
      minimumFractionDigits: 0,
      maximumFractionDigits: 2,
    });

    this.tableItems.forEach((item) => {
      // eslint-disable-next-line no-restricted-syntax
      for (const key in item) {
        if (typeof item[key] === 'number') {
          let formattedValue = numberFormat.format(item[key]);

          if (item[key] % 1 !== 0) { // Verifica si el número tiene decimales
            formattedValue = item[key].toFixed(2).replace(/\./g, ',');
          } else {
            formattedValue = formattedValue.replace(/\.00$/, '');
          }

          item[key] = formattedValue;
        }
      }
    });
  }

我想要'。'从 1,000 开始放置,但它是从 10,000 开始放置的。我试过放置以下但没有成功:

const numberFormat = new Intl.NumberFormat('en', {
      minimumFractionDigits: 0,
      maximumFractionDigits: 2,
      minimumSignificantDigits: 1,
});
javascript formatting number-formatting
2个回答
1
投票

您可以使用

useGrouping
构造函数选项始终显示分组分隔符。这是一个例子:

const formatter = new Intl.NumberFormat("es-ES", { useGrouping: "always" });

for (
  const n of Array.from({ length: 10 }, (_, i) => 10 ** i)
) console.log(formatter.format(n));
/* Logs:
            1
           10
          100
        1.000
       10.000
      100.000
    1.000.000
   10.000.000
  100.000.000
1.000.000.000
*/


1
投票

加入jsejcksn的回答:

西班牙语言环境有

minimumGroupingDigits = 2
(见here),这意味着如果前面的数字少于两位,则不会插入“千位分组字符”。阅读解释here.

为了比较,德国语言环境有

minimumGroupingDigits = 1
(见here):

console.log(
  Intl.NumberFormat("es").format(1000),
  Intl.NumberFormat("de").format(1000)
);

© www.soinside.com 2019 - 2024. All rights reserved.