最近在面试中连续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));