龙空技术网

格式化金额的简单解法

千锋IT教育 106

前言:

此刻朋友们对“金额格式化方法”大概比较关心,咱们都想要学习一些“金额格式化方法”的相关资讯。那么小编同时在网上收集了一些关于“金额格式化方法””的相关资讯,希望各位老铁们能喜欢,小伙伴们快快来了解一下吧!

很久没有写技术相关的博客了,刚好看到一个题目就想着写一个解法吧,因为简单,所以可能会比较实用。

问:请写出一个格式化金额的方法。

这个其实挺常见的,不过程序员都是比较懒的能上网搜的到的肯定不会自己写,有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 千分位格式化