数字转换成中文大写

完成将 toChineseNum 函数,可以将数字转换成中文大写的表示,处理到万级别,

例如:toChineseNum(12345),返回 一万二千三百四十五。

解法1:

1
2
3
4
5
6
7
8
9
10
const toChineseNum = (num) => {
const keys = ['零','一','二','三','四','五','六','七','八','九']
var count = ['','十','百','千','亿']
var str ='';
var nums = num.toString().split('').reverse();
nums.map(function (a, index) {
str = (keys[a]+ ( a==0?'': count[index>3 ? index-4 : index]))+(index=='4'?'万':'')+str
})
return str.replace(/(零(?=零))|(零$)|(零(?=万))/g,'')
}

解法2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const toChineseNum = (num) => {
const unit = ['', '十', '百', '千']
const counts = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']

const pre = Math.floor(num / 10000)
const next = num % 10000

let getfour = (mynum, flag = false) => {
if(!mynum){return ''}
let i = 0, str = ''

while(flag ? i < 4 : mynum > 0 ) {
count = mynum % 10
mynum = Math.floor(mynum / 10)
str = (count ? counts[count] + unit[i] : str[0] == '零' ? '' : str.length && i ? '零' : '') + str
i++
}
return str
}

return pre ? getfour(pre) + '万' + getfour(next, true) : getfour(num)
}

解法3:

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
const toChineseNum = (num) => {
const chiPos = ["千", "百", "十", ""];
const chiNum = ["", "一", "二", "三", "四", "五", "六", "七", "八", "九"];

if (num === 0) {
return "零";
}

let symbol = "";
if (num < 0) {
num = -num;
symbol = "-";
}

let result = "";
num = num + "";
let frontZeros = "0".repeat(chiPos.length - Math.floor(num.length % chiPos.length))//补足前导0
let arr = (frontZeros + num).split("").map((e) => +e);

//find first non-zero digit
let i = 0;
while (arr[i] === 0) {
i++;
}

//开始处理数字
let hasZero = false;
while (i < arr.length) {
if (arr[i] !== 0) {
if (hasZero) {
result += "零";
hasZero = false;
}
result += chiNum[arr[i]] + chiPos[Math.floor(i % chiPos.length)];
} else {
// 每组末尾的0,不用兑现,设置为false
if (Math.floor(i % chiPos.length) === 3) {
hasZero = false;
} else {
hasZero = true;
}
}

//判断是否加上"万""
if (i < arr.length - chiPos.length
&& Math.floor(i % chiPos.length) === 3) {
result += "万";
}

i++;
}

return result;
}
分享到