numberUtil.ts
2.69 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
export function getRandomNumber(numDigits: number) {
if (numDigits <= 0) {
throw new Error('Number of digits must be greater than 0');
}
const min = Math.pow(10, numDigits - 1);
const max = Math.pow(10, numDigits) - 1;
return Math.floor(Math.random() * (max - min + 1)) + min;
}
//代码如下所示:
export function convertCurrency(moneyParm) {
let money = moneyParm;
//汉字的数字
let cnNums = new Array(
'零',
'壹',
'贰',
'叁',
'肆',
'伍',
'陆',
'柒',
'捌',
'玖',
);
//基本单位
let cnIntRadice = new Array('', '拾', '佰', '仟');
//对应整数部分扩展单位
let cnIntUnits = new Array('', '万', '亿', '兆');
//对应小数部分单位
let cnDecUnits = new Array('角', '分', '毫', '厘');
//整数金额时后面跟的字符
let cnInteger = '整';
//整型完以后的单位
let cnIntLast = '圆';
//最大处理的数字
let maxNum = 999999999999999.9999;
//金额整数部分
let integerNum;
//金额小数部分
let decimalNum;
//输出的中文金额字符串
let chineseStr = '';
//分离金额后用的数组,预定义
let parts;
if (money === '') {
return '';
}
money = parseFloat(money);
if (money >= maxNum) {
//超出最大处理数字
return '';
}
if (money === 0) {
chineseStr = cnNums[0] + cnIntLast + cnInteger;
return chineseStr;
}
//转换为字符串
let moneyText = money.toString();
if (moneyText.indexOf('.') === -1) {
integerNum = moneyText;
decimalNum = '';
} else {
parts = moneyText.split('.');
integerNum = parts[0];
decimalNum = parts[1].substr(0, 4);
}
//获取整型部分转换
if (parseInt(integerNum, 10) > 0) {
let zeroCount = 0;
let IntLen = integerNum.length;
for (let i = 0; i < IntLen; i++) {
const n = integerNum.substr(i, 1);
const p = IntLen - i - 1;
const q = p / 4;
const m = p % 4;
if (n === '0') {
zeroCount++;
} else {
if (zeroCount > 0) {
chineseStr += cnNums[0];
}
//归零
zeroCount = 0;
chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
}
if (m === 0 && zeroCount < 4) {
chineseStr += cnIntUnits[q];
}
}
chineseStr += cnIntLast;
}
//小数部分
if (decimalNum !== '') {
let decLen = decimalNum.length;
for (let k = 0; k < decLen; k++) {
let n = decimalNum.substr(k, 1);
if (n !== '0') {
chineseStr += cnNums[Number(n)] + cnDecUnits[k];
}
}
}
if (chineseStr === '') {
chineseStr += cnNums[0] + cnIntLast + cnInteger;
} else if (decimalNum === '') {
chineseStr += cnInteger;
}
return chineseStr;
}