技术频道


JS 数字格式化技巧:千分位保留两位小数

通过 Intl.NumberFormat 这个 API 实现


下面是一个 JS 格式化千分位数字的示例代码:

function formatNumber(number) {
  return new Intl.NumberFormat('en-US', {
    minimumFractionDigits: 2,
    maximumFractionDigits: 2
  }).format(number);
}

// 使用示例
const formattedNumber = formatNumber(1234567.891);
console.log(formattedNumber); // 输出: 1,234,567.89

在这个例子中,Intl.NumberFormat 的第一个参数是语言环境(在这个例子中是 en-US,代表美国英语),第二个参数是一个选项对象,其中 minimumFractionDigitsmaximumFractionDigits 分别指定了要保留的小数位数的最小值和最大值。

如果你想要根据不同的地区格式来格式化数字,只需要更改第一个参数即可。例如,如果你想要以中国地区的格式来显示数字,可以将其改为 zh-CN

function formatNumberForChina(number) {
  return new Intl.NumberFormat('zh-CN', {
    minimumFractionDigits: 2,
    maximumFractionDigits: 2
  }).format(number);
}

// 使用示例
const formattedNumberForChina = formatNumberForChina(1234567.891);
console.log(formattedNumberForChina); // 输出: 1,234,567.89

通过正则来实现


也使用正则表达式来给数字字符串添加千分位符,可以通过替换操作来实现。以下是一个示例函数,它将一个数字字符串转换为带有千分位符的格式:

function addCommasToNumber(numStr) {
  // 将数字转换为数组,然后反转
  const reversed = numStr.split('').reverse();
  // 使用正则表达式添加逗号
  const commaSeparated = reversed.join('').replace(/(\d{3})(?=\d)/g, '$1,');
  // 再次反转字符串以获得正确的顺序
  return commaSeparated.split('').reverse().join('');
}

// 使用示例
const numberStr = '1234567';
const formattedNumberStr = addCommasToNumber(numberStr);
console.log(formattedNumberStr); // 输出: "1,234,567"

在这个函数中,我们首先将数字字符串分割成单个字符的数组,然后反转这个数组。接着,使用正则表达式 /(\d{3})/> 来匹配每三个连续的数字。(?=\d)> 是一个正向前瞻断言,它确保匹配的三个数字后面还有数字,这样我们就不会在数字的最后添加逗号。匹配到的部分会被替换为在数字后面加上逗号的版本。最后,我们将结果再次反转以获得正确的顺序。

请注意,这种方法只适用于不包含小数点的整数。如果数字字符串包含小数点,你需要在替换操作之后重新连接小数部分。

使用 toLocaleString() 方法


let number = 1234567.891;
let formattedNumber = number.toLocaleString();
console.log(formattedNumber); // 输出: "1,234,567.891"

VSCode 扩展阅读:



发表评论