1. 程式人生 > 其它 >阿拉伯數字轉化為漢字繁體大寫(財務金額大寫)和漢字小寫解決方案

阿拉伯數字轉化為漢字繁體大寫(財務金額大寫)和漢字小寫解決方案

/**
     * 將阿拉伯整數轉化成漢字小寫 支援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,'方法號:')) // 方法號:一百一十一億零二百萬