数字转中文

作者:xie392地址:https://v.douyin.com/ieaCXeU3/更新时间:2024-12-21

案例代码

1
/**
2
* 数字转中文,其中中文数字为简体
3
* @param {Number} num 万亿以下的数字
4
* @returns {String}
5
* @example
6
* numToChinese(12323400) // 一千二百三十二万三千四百
7
* numToChinese(1111) // 一千一百一十一
8
*/
9
function numToChinese(num) {
10
// 1、将数字转换为字符串,以万为单位分割
11
const numStr = num.toString().replace(/(?=(\d{4})+$)/g,',').split(',').filter(Boolean)
12
13
const chars = ['零','一','二','三','四','五','六','七','八','九']
14
const units = ['','十','百','千']
15
16
// 处理多个零的情况
17
function handleZreo(str) {
18
return str.replace(/{2,}/g,'零').replace(/+$/,'')
19
}
20
21
// 转换四位数
22
function _transform(n) {
23
if(n === '0000') return chars[0]
24
let reslut = ''
25
for (let i = 0; i < n.length; i++) {
26
// 取出中文数字
27
let c = chars[+n[i]]
28
// 取出单位 个 十 百 千
29
let u = units[n.length - i - 1]
30
// 0 不加单位
31
if(c === chars[0]) {
32
u = ''
33
}
34
reslut += c + u
35
}
36
reslut = handleZreo(reslut)
37
return reslut
38
}
39
40
const bigUnit = ['','万','亿']
41
let reslut = ''
42
// 2、转换每一部分,再加上单位
43
for (let i = 0; i < numStr.length; i++) {
44
const part = numStr[i]
45
const c = _transform(part)
46
let u = bigUnit[numStr.length - i - 1]
47
if(c === chars[0] ) {
48
u = ''
49
}
50
reslut += c + u
51
}
52
// 去除多余的零
53
reslut = handleZreo(reslut)
54
return reslut
55
}
56
57
/**
58
* 数字转中文,且中文数字为繁体
59
*
60
* @param {*} num 万亿以下的数字
61
* @returns
62
*/
63
function toBeChineseNumber(num) {
64
const reslut = numToChinese(num)
65
const map = {
66
'零': '零',
67
'一': '壹',
68
'二': '贰',
69
'三': '叁',
70
'四': '肆',
71
'五': '伍',
72
'六': '陆',
73
'七': '柒',
74
'八': '捌',
75
'九': '玖',
76
'十': '拾',
77
'百': '佰',
78
'千': '仟',
79
'万': '万',
80
'亿': '亿',
81
}
82
return reslut.split('').map(s=>map[s]).join('')
83
}
84
85
console.log(numToChinese('12323400')) // 一千二百三十二万三千四百
86
console.log(numToChinese('1111')) // 一千一百一十一
87
console.log(toBeChineseNumber('12340000123400')) // 壹拾贰叁仟肆佰亿零壹拾贰万叁仟肆佰

输出结果:

1
一千二百三十二万三千四百
2
一千一百一十一
3
壹拾贰叁仟肆佰亿零壹拾贰万叁仟肆佰