美文网首页
Iview实现金额转中文大写效果

Iview实现金额转中文大写效果

作者: 唐植超 | 来源:发表于2019-11-06 13:05 被阅读0次

控件代码

<template>
    <Poptip trigger="focus" :content="getWord"  >
        <slot name="inputBox" @input="change"></slot>
    </Poptip>
</template>
<script>

    export default{
        props: ['text'],
        components: {},
        data: function () {
            return {
                word: ''
            }
        },
        computed: {
            getWord(){
                return this.convertCurrency(this.text);
            }
        },
        created: function () {

        },
        methods: {
            change(e){
                this.word = this.convertCurrency(e);
            },
            convertCurrency(money) {
                //汉字的数字
                var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
                //基本单位
                var cnIntRadice = new Array('', '拾', '佰', '仟');
                //对应整数部分扩展单位
                var cnIntUnits = new Array('', '万', '亿', '兆');
                //对应小数部分单位
                var cnDecUnits = new Array('角', '分', '毫', '厘');
                //整数金额时后面跟的字符
                var cnInteger = '整';
                //整型完以后的单位
                var cnIntLast = '元';
                //最大处理的数字
                var maxNum = 999999999999999.9999;
                //金额整数部分
                var integerNum;
                //金额小数部分
                var decimalNum;
                //输出的中文金额字符串
                var chineseStr = '';
                //分离金额后用的数组,预定义
                var 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 != '') {
                    var decLen = decimalNum.length;
                    for (var i = 0; i < decLen; i++) {
                        var 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>

</style>

调用:

<template>
    <div>
        <InputCnBox :text="money">
            <Input slot="inputBox" v-model.number="money"/>
        </InputCnBox>

    </div>
</template>
<script>
    import InputCnBox from '../components/InputCnBox.vue';
    export default {
        components: {InputCnBox},
        data: function () {
            return {
                money: 0,
            }
        },
        computed: {},
        created: function () {

        },
        mounted() {

        },
        updated() {

        },
        methods: {}
    }
</script>
<style>

</style>

效果图:


inputbox.gif

相关文章

网友评论

      本文标题:Iview实现金额转中文大写效果

      本文链接:https://www.haomeiwen.com/subject/xblubctx.html