-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtoThousands.js
60 lines (55 loc) · 1.42 KB
/
toThousands.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 实现千位分隔符 1234567890 => 1,234,567,890,仅考虑整数
// 多种方法,主要思路:
// 1. 转字符串:从末尾开始递归或者循环每一位处理计数,每三位添加一个逗号
// 2. 数值处理:取余,对1000取余,这个时候需要注意余数不满3位补零,由于number类型没法遍历,使用递归
// 3. 正则表达式:
// 4. toLocaleString()
// 至于具体实现,可能会有各种写法。考虑小数的情况更复杂一些,前1种和第3种方法都需要调整,第2种方法涉及到浮点数运算可能会出现误差
// 1
function toThousands1(num){
let s = (num||0).toString()
let r = ''
let count = 0
for(let i=s.length-1;i>=0;i--){
count++
r = s[i]+ r
if(count % 3===0 && i!==0){
r = ','+ r
}
}
return r
}
// 2
function toThousands2(num){
let r = ''
function calc(num){
if(num<1000){
r = num + r
return
}
let rem = num % 1000
let s = ''
if(rem<10){
s = '00' + rem
}else if(rem<100){
s = '0' + rem
}else{
s = ''+ rem
}
r = ',' + s + r
calc(Math.floor(num/1000))
}
calc(num)
return r
}
// 3
function toThousands3(num){
return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')
}
// 4
function toThousands(num){
return num.toLocaleString()
}
console.log(toThousands(1234567890))
console.log(toThousands(100000))
console.log(toThousands(100000.001))