将普通的数字转换为带千位分隔符格式的数字字符串是一个非常常见的问题,千位分隔符格式的规则是数字的整数部分每三位一组,以“,”分节。小数部分不分节 。
示例:19,351,235.23
这里有几个常见的实现方法。
法一 使用JS自带的函数 toLocaleString
语法:
numObj.toLocaleString([locales [, options]])
toLocaleString()
方法返回这个数字在特定语言环境下的表示字符串。
var a=1234567894532;
var b=673439.4542;
console.log(a.toLocaleString()); // "1,234,567,894,532"
console.log(b.toLocaleString()); // "673,439.454" (小数部分四舍五入了)
要注意的是这个函数在没有指定区域的基本使用时,返回使用默认的语言环境和默认选项格式化的字符串,所以不同地区数字格式可能会有一定的差异。最好确保使用 locales 参数指定了使用的语言。
注:我测试的环境下小数部分会根据四舍五入只留下三位。
法二 使用 正则表达式 和 replace 函数
replace 语法:
str.replace(regexp|substr, newSubStr|function)
var data = 123456789.12345
var b = data.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');
console.log(b) // 123,456,789.12
法三 js硬写
实现思路是将数字转换为字符数组,再循环整个数组, 每三位添加一个分隔逗号,最后再合并成字符串。因为分隔符在顺序上是从后往前添加的:比如 1234567添加后是1,234,567 而不是 123,456,7 ,所以方便起见可以先把数组倒序,添加完之后再倒序回来,就是正常的顺序了。要注意的是如果数字带小数的话,要把小数部分分开处理。
代码冗长,不推荐此方法,所以在这里就不赘述了,如若想用此方法,可参考文章=》https://www.jianshu.com/p/928c68f92c0c
如果本文对你有所帮助,感谢点一颗小心心,您的支持是我继续创作的动力!
网友评论