手写一个数字千分位格式化函数

80 阅读1分钟

在前端开发中,千分位格式化是一个非常常见的需求。尤其是在涉及金额、数据统计、报表展示时,一个格式良好的数字能大幅提升用户的阅读体验。

目标实现

formatNumberToThousands(1234567.89)
// => "1,234,567.89"

代码如下

/**
 * 将数字格式化为带千分位分隔符的字符串形式
 * 例如:1234567.89 => "1,234,567.89"
 *
 * @param number - 需要格式化的数字
 * @returns 格式化后的字符串
 * @throws 如果传入的不是一个有效数字,则抛出异常
 */
function formatNumberToThousands(number: number): string {
  if (isNaN(number)) {
    throw new Error('必须是一个有效数字');
  }

  const [integer, decimal] = number.toString().split('.');
  let formatterInteger = '';

  for (let i = integer.length - 1; i >= 0; i--) {
    formatterInteger = integer[i] + formatterInteger;

    // 每3位添加一个逗号(除了最前面)
    if ((integer.length - i) % 3 === 0 && i !== 0) {
      formatterInteger = ',' + formatterInteger;
    }
  }

  // 如果有小数部分,拼接上去;否则只返回整数部分
  return decimal ? `${formatterInteger}.${decimal}` : formatterInteger;
}

使用实例

formatNumberToThousands(1000000)      // "1,000,000"
formatNumberToThousands(1234567.89)   // "1,234,567.89"
formatNumberToThousands(987654321.0)  // "987,654,321"
formatNumberToThousands(NaN)          // 抛出异常

简单、快捷、方便理解,不使用正则

欢迎大家留言探讨你们的实践经验,如有疏漏或不妥之处,欢迎在评论区指出,互相学习,共同进步!