**实现逻辑**
亿 仟 佰 拾 万 仟 佰 拾 元 角 分
1 2 3 4 5 6 7 8 1 2 3
1 2 3 4 5 0 0 0 1 2 3
1 2 3 4 5 0 0 0 1 0 3
1 2 3 4 5 0 0 0 1 1 0
1 2 3 4 5 0 0 0 0 0 0
1、格式化入参
转为字符串、去掉千分符
不足两位小数补零
2、计算小数、整数长度
所有的数值对应的汉字,进制对应单位
3、数字转大写,添加进制
4、整数部分处理
5、小数部分处理
<template>
<div>
<div>
<span>
请输入金额:
span>
<el-input placeholder="请输入内容" class="input-with-select" style="width:300px" v-model="amount">
<el-button slot="append" icon="el-icon-circle-check" title="金额大写转换" @click="gotoCapAmountFn">el-button>
el-input>
div>
<div>{{capAmount|capAmountToString}}div>
div>
template>
<script>
export default {
data() {
return{
amount:"",
capAmount:"",
}
},
filters: {
capAmountToString: function (values) {
if(values === null || values === ''){
return "";
}
values = values.toString();
let reg = new RegExp(",");
values = values.replace(reg, "");
let capArr = values.split(".");
if (capArr.length < 2) {
capArr[1] = "00";
} else if (capArr[1].length == 1) {
capArr[1] = capArr[1][0] + "0";
}
let len = capArr[0].length;
let len2 = capArr[1].length;
let arr = [],
arr2 = [];
let chin_list = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖",];
let chin_lisp = ["仟","佰","拾","兆","仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾",];
let chin_lisp2 = ["角", "分"];
for (let i = 0; i < len; i++) {
arr.push(parseInt(capArr[0][i]));
arr[i] = chin_list[arr[i]];
}
for (let i = len - 1, j = 1; i > 0; i--) {
arr.splice(i, 0, chin_lisp[chin_lisp.length - j++]);
}
for (let n = 0; n < len2; n++) {
arr2.push(parseInt(capArr[1][n]));
arr2[n] = chin_list[arr2[n]];
}
for (let i = len2, j = 1; i > 0; i--) {
arr2.splice(i, 0, chin_lisp2[chin_lisp2.length - j++]);
}
arr = arr.join("");
if (len >= 1) {
arr += "元";
}
arr = arr
.replace(/零[仟佰拾]/g, "零");
arr = arr.replace(/零{2,}/g, "零");
arr = arr.replace(/零([兆|亿|万|元])/g, "$1")
arr = arr.replace(/亿零{0,3}万/, "亿")
arr = arr.replace(/兆零{0,3}亿/, "兆")
arr = arr.replace(/^元/, "零元");
arr2 = arr2.join("");
arr = arr + arr2;
arr = arr.replace(/零角/, "零");
arr = arr.replace(/零{1,2}分/, "整");
return arr;
},
},
methods: {
gotoCapAmountFn(){
this.capAmount = this.amount;
}
}
}
script>