在前端开发中,千分位格式化是一个非常常见的需求。尤其是在涉及金额、数据统计、报表展示时,一个格式良好的数字能大幅提升用户的阅读体验。
目标实现
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) // 抛出异常
简单、快捷、方便理解,不使用正则
欢迎大家留言探讨你们的实践经验,如有疏漏或不妥之处,欢迎在评论区指出,互相学习,共同进步!