• 数字怎么转中文汉字


    /**
     * 输入需要转化的数字
     * @param num 传入数字
     *  @returns {String}
     */
    export function toChineseNum(num: number): string {
        if (typeof num !== 'number') {
            return '';
        }
        if (num === 0) {
            return '零';
        }
        const numberCharacter = [ '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' ];
        const textCharacter = [ '', '十', '百', '千' ];
        const wordCharacter = [ '', '万', '亿' ];
        /**
         * 输入数组,返回按照位数分割的数组
         * @param number 传入的数字
         * @param range 按照此位数将数字分割
         * @returns {Array} 返回用逗号分隔的数组
         */
        const splitStr = (number: number, range = 4) => {
            let str = number.toString();
    
            const [ left ] = str.split('.');
    
            const strArr = left.split('').reverse();
    
            let result = [];
            for (let i = 0; i < strArr.length; i += range) {
                result.push(
                    strArr
                        .slice(i, i + range)
                        .reverse()
                        .join('')
                );
            }
            return result.reverse();
        };
    
        /**
         * 输入一个四位数的数字,返回汉字表示
         * @param item
         * @returns {string}
         */
        const getChineseItem = (item: string) => {
            let temp = item
                .toString()
                .split('')
                .reverse()
                .map((value: any, index: number) => {
                    // 如果数字是0, 后面的两次就没有必要加了,例如102中的0, 就不需要翻译成为【零十】
                    return numberCharacter[value] + (Number(value) === 0 ? '' : textCharacter[index]);
                })
                .reverse();
    
            // 多个重复的零只保留一个
            temp = temp.reduce((total: any[], current: string) => {
                if (total[total.length - 1] === '零' && current === '零') {
                    return total;
                }
                total.push(current);
                return total;
            }, []);
    
            // 针对12,将结果由[一十二]修正为[十二]
            if (temp.length === 2) {
                temp[0] = temp[0].replace(/一十/, '十');
            }
    
            // 结尾的零要忽略,针对10,将结果由[十零]修正为[十]
            if (temp[temp.length - 1] === '零') {
                temp.pop();
            }
    
            return temp.join('');
        };
    
        let splitArr = splitStr(num).reverse();
        return splitArr
            .map(v => getChineseItem(v))
            .map((v, index) => v + wordCharacter[index])
            .reverse()
            .join('');
    }
    

      

  • 相关阅读:
    js post提交
    JS转换HTML转义符
    HTML 空格的表示符号 nbsp / ensp / emsp 的区别
    JS解析XML文件和XML字符串
    js数组
    javaScript系列:js中获取时间new Date()详细介绍
    父类和子类(指针,对象,引用 ,盲点)
    震惊~数组居然可以直接比较大小
    二分递归求最大次大的方法(数组的下标的表示方法居然可以方括号内部加减)
    二分递归
  • 原文地址:https://www.cnblogs.com/Ewarm/p/13744004.html
Copyright © 2020-2023  润新知