将数字金额转换为中文汉字金额

17 阅读1分钟

在项目涉及到交易的时候往往会需要将数字的金额转为中文,以便用户确认,所以整理了这个方法,有不足之处欢迎指正

function convertToChinaNum(num) {
            let arr = num.toString().split('.')
            if (arr.length == 2) {
                num = arr[0]
            }
            var arr1 = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
            var arr2 = ['', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟','万', '拾', '佰', '仟','亿'];//可继续追加更高位转换值
            if(!num || isNaN(num)){
                return "";
            }
            var english = num.toString().split("") // [1, 2, 3, 4, 5]
            var result = "";
            for (var i = 0; i < english.length; i++) {           // 0      1
                var des_i = english.length - 1 - i;//倒序排列设值  // 4      3
                result = arr2[i] + result;                       // ''     拾伍
                var arr1_index = english[des_i];                 // 5      4
                result = arr1[arr1_index] + result;              // 伍     肆拾伍
            }
            //将【零仟、零佰】换成【零】 【拾零】换成【拾】
            result = result.replace(/零(仟|佰|拾)/g, '零').replace(/拾零/g, '拾');
            //合并中间多个零为一个零
            result = result.replace(/零+/g, '零');
            //将【零亿】换成【亿】【零万】换成【万】
            result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
            //将【亿万】换成【亿】
            result = result.replace(/亿万/g, '亿');
            //移除末尾的零
            result = result.replace(/零+$/, '')
            //将【零壹拾】换成【零拾】
            // result = result.replace(/零壹拾/g, '零拾');//貌似正规读法是零壹拾
            //将以【壹拾】开头的换成【拾】
            result = result.replace(/^壹拾/g, '拾');
            if (arr.length == 2) {
                result = (result + "元" + arr1[arr[1][0]] + "角" + (arr[1][1] ? ( arr1[arr[1][1]] + "分") : ""))
                return result
            } else {
                return result + "元"
            }
            
        }