什么是千位分隔符

国际数字通用习惯,每隔三位数字加一个逗号。究其原因是因为英文里没有“万”、“亿”,只有“百万(million)”、“十亿(billion)”,因此他们发明了这种千位分隔符法,用于快速分辨大型数值:

1,000 one thousand 一千
1,000,000 one million 一百万
1,000,000,000 one billion 十亿


JS实现千位运算符的方法

正则表达式法

/**
 * 千位分隔符
 *
 * @param {number} num 数字
 * 
 * @return {string} 19,871,017
 */
function T_THOUSAND_SEPARATOR_NUM(num) {
  if (typeof num === 'number') {
    return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  } else {
    console.warn('工具方法类警告: 输入参数并非数字类型');
    return num;
  };
};

Number.prototype.toLocaleString()
其中 toLocaleString() 方法返回这个数字在特定语言环境下的表示字符串。
参考:Number.prototype.toLocaleString() – JavaScript | MDN

/**
 * 千位分隔符
 *
 * @param {number} num 数字
 * 
 * @return {string} 19,871,017
 */
function T_THOUSAND_SEPARATOR_NUM(num) {
  if (typeof num === 'number') {
    return num.toLocaleString('en-US');
  } else {
    console.warn('工具方法类警告: 输入参数并非数字类型');
    return num;
  };
};

Intl.NumberFormat
Intl.NumberFormat 是对语言敏感的格式化数字类的构造器类
参考资料:Intl.NumberFormat – JavaScript | MDN

/**
 * 千位分隔符
 *
 * @param {number} num 数字
 * 
 * @return {string} 19,871,017
 */
function T_THOUSAND_SEPARATOR_NUM(num) {
  if (typeof num === 'number') {
    let nf = new Intl.NumberFormat('en-US');
    return nf.format(num);
  } else {
    console.warn('工具方法类警告: 输入参数并非数字类型');
    return num;
  };
};

HTML语义化

在屏幕阅读器的无障碍访问下,如果展现的数字为“19871017”,则屏幕阅读器会读出“一九八七一零一七”,而展现的数字为“19,871,017”时,则会读出“一千九百八十七万一千零一十七”。