tui-amount-inwords.vue
3.48 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<template>
<text v-if="show && money" class="tui-amount-inwords"
:style="{fontSize:size+'rpx',color:color,fontWeight:fontWeight,padding:padding}">{{money}}</text>
</template>
<script>
export default {
name: "tui-amount-inwords",
emits: ['change'],
props: {
value: {
type: [Number, String],
default: 0
},
size: {
type: [Number, String],
default: 32
},
color: {
type: String,
default: '#333'
},
fontWeight: {
type: [Number, String],
default: 400
},
padding: {
type: String,
default: '0'
},
show: {
type: Boolean,
default: true
}
},
data() {
return {
money: ''
}
},
watch: {
value(newValue, oldValue) {
this.money = this.getAmountInWords(newValue)
this.$emit('change', {
moeny: this.money
})
}
},
created() {
this.money = this.getAmountInWords(this.value)
this.$emit('change', {
moeny: this.money
})
},
methods: {
trimAll: function(value) {
return value.toString().replace(/\s+/g, "").replace('¥',"")
},
getAmountInWords(money) {
money = this.trimAll(money)
//汉字的数字
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;
}
//转换为字符串
money = money.toString();
if (money.indexOf('.') == -1) {
integerNum = money;
decimalNum = '';
} else {
parts = money.split('.');
integerNum = parts[0];
decimalNum = parts[1].substr(0, 4);
}
//获取整型部分转换
if (parseInt(integerNum, 10) > 0) {
var zeroCount = 0;
var IntLen = integerNum.length;
for (var i = 0; i < IntLen; i++) {
var n = integerNum.substr(i, 1);
var p = IntLen - i - 1;
var q = p / 4;
var 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 i = 0; i < decLen; i++) {
let n = decimalNum.substr(i, 1);
if (n != '0') {
chineseStr += cnNums[Number(n)] + cnDecUnits[i];
}
}
}
if (chineseStr == '') {
chineseStr += cnNums[0] + cnIntLast + cnInteger;
} else if (decimalNum == '') {
chineseStr += cnInteger;
}
return chineseStr;
}
}
}
</script>
<style scoped></style>