数字千分位

350 阅读1分钟

最近在面试中连续2场碰到了这样一道题

获取一个数据,给该数字每三位添加一个逗号,类似银行卡余额的写法,这就是常见的数字千分位题,然后还有一道大概是Ajax获取一个数据,这个数据可能带百分号或者$符号等等符号,如何获取到这个数字。

在这我想巩固一下自己对这两道题的解法,以方便后续面试中回答。

function fmoney(s, n) {    /*     * 参数说明:     * s:要格式化的数字     * n:保留几位小数     * */    n = n > 0 && n <= 20 ? n : 2;    s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";    var l = s.split(".")[0].split("").reverse(),        r = s.split(".")[1];    t = "";    for (i = 0; i < l.length; i++) {        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");    }    return t.split("").reverse().join("") + "." + r;}//调用fmoney(9.7,2);//9.70fmoney('12345.675910', 3);//12,345.676

以上是用split的和反转 方法解答 应当还有多种方法,如果有更多的方法可以留言互相借鉴。

实际工作中应当有很多类库可以帮助我们实现

 num.toLocaleString();    console.log(num);    console.log(num.toLocaleString()); 

浏览器自带的方法

然后我自己写了一个方法 也能执行出来

 function demo(e) {      var res = [];      var count = 0;      e = (e || 0).toString().split('');      for (let i = e.length - 1; i >= 0; i--) {        res.unshift(e[i]);        count++;        if (count % 3 == 0 && i != 0) {          res.unshift(',');        }      }      return res.join('')    }    console.log(demo(num));