【算法题】将十二位之内的数字转为汉字输出

// 单位,末尾 个 省略
    const charUnitArr = ['千', '百', '十', '亿', '千', '百', '十', '万', '千', '百', '十', ''];
    // 数字 0-9的 汉字写法
    const chartNumberArr = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
    function transformToCharNumber(number) {
        if (isNaN(parseInt(number))) {
            console.error('请输入数字');
            return number;
        }
        const numberStrArr = number.toString().split('');
        // 超过12位的不纳入计算范围内
        if (numberStrArr.length > 12) {
            console.error('数字过大');
            return number;
        }
        // 数字汉化
        const numberCharArr = numberStrArr.map((ele) => chartNumberArr[+ele]);
        const numberStrArrLength = numberCharArr.length;
        // 裁取对应数字位数的单位
        const unitArr = charUnitArr.slice(-numberStrArrLength);
        // 数字加上对应位数的单位
        const tempNumberWithUnitArr = numberCharArr.map((ele, index) => {
            return `${ele}${unitArr[index]}`;
        });
        // 保留数字类型
        const numberArr = numberStrArr.map((ele) => +ele);
        // 做去“零”处理
        const resultStr = numberArr.map((ele, index) => {
            if (ele !== 0 || (ele === 0 && numberArr.length === 1)) return tempNumberWithUnitArr[index];
            if (numberArr[index - 1] === 0 && numberArr[index + 1] !== 0) {
                const [num, unit] = tempNumberWithUnitArr[index].split('');
                return num;
            }
            if (numberArr[index] === 0) {
                const [num, unit] = tempNumberWithUnitArr[index].split('');
                if (unit === '亿' || unit === '万') {
                    return unit;
                }
            }
            return '';
        })
        // 去零处理后避免出现亿万连续
        let returnStr = resultStr.join('').replace('亿万', '亿');
        // 符合常用习惯
        if (returnStr.slice(0, 2) === '壹十') {
            returnStr = returnStr.slice(1);
        }
        // 当个位数大于一位,去掉末尾的零,
        if (returnStr.length > 1) {
            returnStr = returnStr.replace(/[零.]$/, '');
        }
        return returnStr;
    }
    const testArr = [10, 0, 100, 1000008, 300001008, 100000, 123, 654646, 8778799, 54684897894, 945468489789, null, undefined, 'adad'];
    testArr.forEach((ele) => {
        console.log(ele, transformToCharNumber(ele));
    })

代码运行结果如下

 

posted @ 2023-09-22 14:16  LeoX的爬坑笔记  阅读(25)  评论(0编辑  收藏  举报