1

希望实现浮点数字每三位加一个逗号
网上的做法很多,看了一些,但是还是想按着自己的思路自己写

let str = "8432957983475934.84378";
let reg = new RegExp(/(?<=\d)(?=(\d{3})+(\.\d+)?$)/,'g');
console.log(str.replace(reg,','));

输出是:

8,432,957,983,475,934.84,378

目前小数点前都是对的 但是小数点后应该是不出现逗号的
麻烦大神帮忙改改

2019-04-10 提问
5 个回答
0

已采纳
function formatNumber(str){
    let reg = new RegExp(/(?<=\d)(?=(\d{3})+(\.\d+)?$)/,'g');
    let i = str.indexOf('.');
    return str.replace(reg,(...args)=>args[args.length-2]<i|i==-1?",":"");
}
1
let reg = new RegExp(/(?<=\d)(?=(\d{3})+\.(.\d+)?$)/,'g');
0

正则的问题出在最后的问号上,才会造成小数点后也会被匹配到。

console.log(new Intl.NumberFormat(navigator.language, {maximumFractionDigits:20}).format(1234567890.123456789));

0

给你个最直观思路(兼容整数):

  1. 整数部分转成字符串,倒序后,每3位添加一个逗号,然后再倒序即完成了整数的切割。
  2. 将处理好的整数 连接 右侧小数部分即可
var str = "8432957983475934.84378"
var result = str.split(".")[0].split('').reverse().join('').replace(/(\d{3})/g, '$1,').split('').reverse().join('') + str.replace(/(\d+\b)/,'');
console.log(result);

撰写答案

推广链接