数字转成千分位
js方式
** 12,345,678 从后往前每三位数字都用逗号隔开,
思路:先将数字转化为字符串 toString() 或者String() ,再将字符串转化为数组用split() 方法,然后使用 reverse() 方法翻转数组,因为只有翻转数组后我们才好处理,再每隔三个元素插入一个逗号,最后再将数组翻转过来再通过 join() 方法转化为字符串**
var num = 12345678
function RMB(num) {
let arr = []
String(num).split("").reverse().forEach((value, index) => {
arr.push(value)
if ((index + 1) % 3 == 0 && index + 1 != String(num).split("").reverse().length) {
arr.push(",")
}
})
return arr.reverse().join("")
}
console.log(RMB(12345678));
在数字转千分位的方法中关键的一点是,每隔三位插入一个逗号,我们需要在循环外新建一个数组,该数组的长度是有临界值的。同时在if判断中,每隔三个数插入一个逗号,当num的长度是3的倍数时最后一个数字后面不应该在需要逗号,否则就会变成 “ ,123,456,789 ”这样的形式,显然不符合格式。
正则表达式
function format(number){
//var reg = /(\d{1,3})(?=(\d{3})+(\.(\d)*$))/g;
var reg =/(\d{1,3})(?=((\d{3}))+(\.\d*)?$)/g;//这个更棒
return (number.toFixed(2) +'').replace(reg,'$&,');
}
console.log(format(12345678.123));//=>12,345,678.12
\d : 匹配任意数字(digit .n 数字----方便记忆LOL)
{n,m}:m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
?=pattern:正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
+:匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
.: 转义用于匹配小数点.。
:匹配前面的子表达式零次或多次。例如,zo能匹配“z”以及“zoo”。*等价于{0,}。
?:匹配前面的子表达式零次或一次。例如,“do(es)?”可以配“does”或“does”中的“do”,等价于{0,1}。?还有另外其它的用法,用于添加非贪婪匹配特性。
$:匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,KaTeX parse error: Undefined control sequence: \n at position 5: 也匹配“\̲n̲”或“\r”之前的位置。 g…&
:表示与 regexp 相匹配的子串。