5种JavaScript实现千位分隔符的方法

在项目开发中需要js实现千位分隔符来分割一个整数,比如我想将数字 1234567 显示为“1,234,567”。我该怎么实现呢?

方法一、toLocaleString

Number.prototype.toLocaleString。它是在 JavaScript 1.5(于 1999 年推出)中实现的,因此基本上所有主要浏览器都支持它。

var num = 12345.1234
num.toLocaleString();//'12,345.123'

方法二、利用循环

实现思路是将数字转换为字符数组,再循环整个数组, 每三位添加一个分隔逗号,最后再合并成字符串。

function numberWithCommas(x) {
    x = x.toString();
    var pattern = /(-?\d+)(\d{3})/;
    while (pattern.test(x))
        x = x.replace(pattern, "$1,$2");
    return x;
}
numberWithCommas(12312124545);//'12,312,124,545'
numberWithCommas(123121245.45);//'123,121,245.45'

方法三、正则表达式和replace函数

使用正则表达式和replace函数,相对前两种我更喜欢这种方法,虽然正则有点难以理解。

function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

方法四:Intl.NumberFormat

原生js功能。支持 IE11、Edge、最新的 Safari、Chrome、Firefox、Opera、iOS 上的 Safari 和 Android 上的 Chrome。
可以把普通的数字,转换成不同的货币和格式样式字符串。

let number = 1234567890;
let nf = new Intl.NumberFormat('en-US');
nf.format(number); // "1,234,567,890"

方法五:js实现

function paddingNum(inputNum) {
    let flag = inputNum > 0 ? true : false;
    let numArr = Math.abs(inputNum).toString().split('.');
    let right = numArr[1] ? '.' + numArr[1] : '';   // 小数点右边的数字
    let left = numArr[0];  // 小数点左边的数字
    let temp = '';
    while (left.length > 3) {
        // str.slice(start, end); 截取字符串,返回截取的字符串,end取不到
        temp = ',' + left.slice(-3) + temp;
        left = left.slice(0, left.length - 3);
    }
    return flag ? left + temp + right : '-' + left + temp + right;
}
console.log(paddingNum(2, 3));        // return '33'
console.log(paddingNum(1234.56));     // return '1,234.56'
console.log(paddingNum(123456789));   // return '123,456,789'
console.log(paddingNum(-987654.3));   // return '-987,654.3'
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值