前言:
此刻朋友们对“金额格式化方法”大概比较关心,咱们都想要学习一些“金额格式化方法”的相关资讯。那么小编同时在网上收集了一些关于“金额格式化方法””的相关资讯,希望各位老铁们能喜欢,小伙伴们快快来了解一下吧!很久没有写技术相关的博客了,刚好看到一个题目就想着写一个解法吧,因为简单,所以可能会比较实用。
问:请写出一个格式化金额的方法。
这个其实挺常见的,不过程序员都是比较懒的能上网搜的到的肯定不会自己写,有Git仓库的肯定直接拉来就用,我当然也不例外。
所以我就找了一个网上的方法。
//* 金额千分位加逗号,保留2位小数,不足补零,否则四舍五入// * 参数说明:// * num:要格式化的数字 string或者number// * decimals:保留几位小数// * dec_point:小数点符号// * thousandsSep:千分位符号// return 金额格式的字符串,如'1,234,567.45'// * */function number (num, decimals, thousandsSep) { if (isNaN(num)) { num = '0.00' } let prec = !isFinite(+decimals) ? 0 : Math.abs(decimals) // 保留的位数一定是有限位数的正整数 let sep = (typeof thousandsSep === 'undefined') ? ',' : thousandsSep let s = num.toString().replace(/,/g, '') // 字符串,将,变成''; let p = parseFloat(s) // 解析一个字符串,并返回一个浮点数 let n = isNaN(p) ? 1 : p let formatNum = n.toFixed(prec).toString().replace(/(\d)(?=(\d{3})+\.)/g, function ($0, $1) { return $1 + sep }) return num ? formatNum : ''}// let num = number(333322.8199, 5,'')// console.log(num,'nm')
恩。。。其实也蛮简单的,但是看到正则了,正则对萌新其实是不友好的,所以我就自己又写了一个,希望对你有帮助吧。
/**@number:需要格式化的数字@decimals:小数点位数@separator:千分位分割符**/function formatNumber(number,decimals,separator){ if(isNaN(Number(number))){ return "0" } let _separator = separator||","; let _decimals = decimals||2; let numberStr = number.toFixed(_decimals); let splitArray = numberStr.split("."); let left = splitArray[0]; let right = splitArray[1]; let array = left.split('').reverse(); let array2 = [] for(let i = 0; i < array.length; i++){ if(i>0&&i%3===0){ array2.push(_separator); } array2.push(array[i]); } return array2.reverse().join("")+"."+right;}let number = 20200421.56787;formatNumber(number);console .log(formatNumber(number,3,null))//20,200,421.57
我的思路其实比较简单,线分割小数点,整数部分处理千分位,处理方法也比较常见,就是字符串和数组的一些方法,先把数组倒转,然后循环插入分隔符。
好了,就这样吧。如果你记不住正则,那么这个解法适合。
最后反思一下, 阿里给的第一轮笔试就挂了,啊哈哈,三个题目就做了两个半,题目都很简单,是我自己没准备,虽然我比较讨厌刷题,但是如果你是为了一份工作的话,尤其是大厂,还是考虑下刷题吧,虽然拿到了别的offer。
标签: #金额格式化方法 #金额格式化方法是什么 #js 千分位格式化