美文网首页
js方法-123456789转一二三四五六七八九

js方法-123456789转一二三四五六七八九

作者: 前端架构师陈龙威 | 来源:发表于2020-04-10 16:26 被阅读0次

前言

敲完工作代码,遇到个群里有人问有没有好的123456789转一亿二千三百四十五万六千七百八十九的方法。正好拿来放松下。
先去网上找了有没有相关的资料,找到一个比较好的思路:

var n = 123456789
var zh = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
[...String(n)].map(item => zh[parseInt(item, 10)]).join(''); // 就能获得一二三四五六七八九

正文代码

// 不支持012100012这种错误格式判断
function arabicToChinese(n, type = 'zh') {
    n = typeof(n) == 'string'? parseInt(n, 10): n;
    let zhArr, zhUnit;
    // 增加一个繁简判断
    if (type = 'zh') {
        zhArr = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
        zhUnit = ['', '十', '百', '千', '万', '亿', '万亿', '亿亿'];
    } else if(type = 'zhtw') {
        zhArr = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
        zhUnit = ['', '拾', '佰', '仟', '万', '亿','万亿', '亿亿'];
    }
    // result是输出结果,unitPos是循环中当前排到的位置,wan、yi、wanyi都是单位是否添加的标志
    let result = '', unitPos = 0, wan = false, yi = false, wanyi = false;
    while(n>0) {
        // %为取模,n除以10最后的余数,此法为获取n的最后一位,因为后面会对n进行n=Math.floor(n/10)的位数缩减
        // 所以此法循环可有效获取n的每一位数值
        let y = n % 10;
        if (y === 0) {
            // 阿拉伯数字12356789转对应中文
            // 如果是零的话,就不会涉及到单位
            result = zhArr[y] + result;
        } else {
            // 阿拉伯数字12356789转对应中文
            // 非零的话,会涉及到单位
            // 0-4位需取十百千,5-8位只需取一次单位万,9-12位只需取一次单位亿
            if(unitPos>=0 && unitPos <4){
                result = zhArr[y] + zhUnit[unitPos] + result;
            } else if (unitPos>=4 && unitPos <8) {
                if (!wan) {
                    wan = true;
                    result = zhArr[y] + zhUnit[unitPos-4] + zhUnit[4] + result ;
                } else {
                    result = zhArr[y] + zhUnit[unitPos-4] + result;
                }
            } else if (unitPos >= 8 && unitPos <12) {
                if (!yi) {
                    yi = true;
                    result = zhArr[y] + zhUnit[unitPos-8] + zhUnit[5] + result;
                } else {
                    result = zhArr[y] + zhUnit[unitPos-8] + result;
                }
            } else if (unitPos >= 12 && unitPos < 16) {
                if (!wanyi) {
                    wanyi = true;
                    result = zhArr[y] + zhUnit[unitPos-12] + zhUnit[6] + result;
                } else {
                    result = zhArr[y] + zhUnit[unitPos-12] + result;
                }
            }

        }
        unitPos++;
        n = Math.floor(n / 10);
    }
    // 处理多个零的情况,变成一个零
    result = result.replace(/\零{2,}/g, '零');
    // 处理最后一位为零的情况
    if (result.endsWith('零')) {
        result = result.substr(0, result.length-1)
    }
    return result;
} 

相关文章

  • js方法-123456789转一二三四五六七八九

    前言 敲完工作代码,遇到个群里有人问有没有好的123456789转一亿二千三百四十五万六千七百八十九的方法。正好拿...

  • 解决事件需要e对象,还需要传别的参数

    方法一 HTML JS 方法二: HTML JS 方法三: HTML JS

  • 一 十

    二三四五六七八九十 一二三四五六七八九

  • webview与js交互

    1.iOS调用js方法 先看下js的方法 上面就是js的方法,methodName是方法名由iOS和js双方约定,...

  • JS常用代码

    JS、jQuery插入元素的几种方法 方法一: HTML代码 JS代码 方法二: HTML代码 JS代码 方法三:...

  • # JS与WKWebview交互

    JS与WKWebview交互 1.ios调用js方法 比如js方法: ios执行这个方法并传值,同时接收js返回值...

  • iOS中 wkwebView与js 简单交互

    iOS 代码 js调用OC 方法 1、添加方法 2、接收js调用oc 的代理方法 3、移除js的监听方法 oc调用...

  • WebViewJavascriptBridge 使用

    目的 掌握 OC 调用 JS方法 JS 调用 OC方法 OC——>sender JS——> sender OC 调...

  • Javascript

    JS基础 《Javascript原理、方法与实践》 《JS原理、方法与实践》- Javascript简介 《JS原...

  • 无题

    人生不如意十有一二三四五六七八九 瞎逼逼而已

网友评论

      本文标题:js方法-123456789转一二三四五六七八九

      本文链接:https://www.haomeiwen.com/subject/dpormhtx.html