阿拉伯数字转化为汉字繁体大写(财务金额大写)和汉字小写解决方案

/**
     * 将阿拉伯整数转化成汉字小写 支持12位整数
     * @param n 为整数型 number 或者 string
     * @param customText 字符串
     * @returns {string}
     */
    function numToChinese(n,customText='我是默认字符串:') {
        if (n === 0) {
            return '零'
        }
        if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) {
            return '格式错误'
        }
        n = parseInt(n) // 转化为整型
        if (n.toString().length > 12) {
            return '数据超出解析范围'
        }
        let unit = '千百十亿千百十万千百十个',
            str = '';
        n += ''
        let p = n.length // 获取整数部分长度

        if (p >= 0) {
            n = n.substring(0, p) + n.substr(p + 1, 0)
        }
        unit = unit.substr(unit.length - n.length)

        for (let i = 0; i < n.length; i++){
            str += '零一二三四五六七八九'.charAt(n.charAt(i)) + unit.charAt(i)
        }
        let result =
            customText +
            str
                .replace(/零(千|百|十)/g, '零')
                .replace(/(零)+/g, '零')
                .replace(/零(万|亿|个)/g, '$1')
                .replace(/(亿)万/g, '$1$2')
                .replace(/^个零?/g, '')
                .replace(/个$/g, '')
        // 去掉末尾的零
        if (result.charAt(result.length - 1) == '零') {
            result = result.substring(0, result.length - 1)
        }
        return result
    }


/** * 数字转换中文繁体大写 支持12位整数 * @param n number数值 或者string数值 类型 * @returns {string} */ function numToTraditionalChinese(n) { if (n === 0) { return '零' } if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) { return '格式错误' } let unit = '仟佰拾亿仟佰拾万仟佰拾元角分', str = '' n += '00' let p = n.indexOf('.') // 获取整数部分长度 if ((p == -1 && n.toString().length > 12) || (p !== -1 && p > 12)) { return '数据超出解析范围' } if (p >= 0) { n = n.substring(0, p) + n.substr(p + 1, 2) // 截取整数部分和小数点后两位 整合成新整数 } unit = unit.substr(unit.length - n.length) for (let i = 0; i < n.length; i++) { str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i) } return str .replace(/零(仟|佰|拾|角)/g, '零') .replace(/(零)+/g, '零') .replace(/零(万|亿|元)/g, '$1') .replace(/(亿)万/g, '$1$2') .replace(/^元零?|零分/g, '') .replace(/元$/g, '元整') } console.log(numToTraditionalChinese(111020000000.03331)) // 壹仟壹佰壹拾亿贰仟万元零叁分 console.log(numToChinese(11102000000.55,'方法号:')) // 方法号:一百一十一亿零二百万

 

posted @ 2022-03-10 16:25  阿哲淘小子  阅读(409)  评论(0编辑  收藏  举报