财务用数字转换为阿拉伯数字

注:

不支持首位“一”省略的写法,比如“十八”就需要写成“一十八”才行;

末尾的计数单位也不支持省略,比如“五百八”就需要写成“五百八十”才行;

function chsNum2Arab(str){
    str = str || "";
    var dic = {
        "亿":100000000,
        "万":10000,
        "千":1000,
        "仟":1000,
        "百":100,
        "佰":100,
        "十":10,
        "拾":10,
        "玖":9,
        "九":9,
        "八":8,
        "捌":8,
        "柒":7,
        "七":7,
        "六":6,
        "陆":6,
        "五":5,
        "伍":5,
        "四":4,
        "肆":4,
        "三":3,
        "叁":3,
        "二":2,
        "贰":2,
        "一":1,
        "壹":1,
        "零":0
    };
    //一百八十七万三千五百
    // 七十亿四千六百万
    var unitArr = ["亿","万","千","仟","百","佰","十","拾"];
    var units = unitArr.join(",");
    var resNum = 0;
    var resNum0 = 0;
    var tmpNum = 0;
    var tmpStr = "";
    var sectionY = str.substr(0,str.lastIndexOf("亿")+1);//找到亿以上的部分
    var sectionY0 = str.substr(0,str.lastIndexOf("亿"));
    tmpStr = str.substr(str.lastIndexOf("亿")+1,str.length);
    var sectionW = tmpStr.substr(0,tmpStr.lastIndexOf("万")+1);//找到万以上的部分;
    tmpStr = tmpStr.substr(tmpStr.lastIndexOf("万")+1,tmpStr.length);
    var sectionG = tmpStr;//万以下的部分
    //亿以上的部分需要递归
    if(sectionY0.indexOf("亿")>-1 || sectionY0.indexOf("万")>-1){
        resNum = chsNum2Arab(sectionY0) * dic[sectionY.substr(sectionY.length-1,1)];
    }else{
        for(var i=0,l=sectionY0.length;i<l;i++){
            var tmpsY0 = sectionY0.substr(i,1);
            if(units.indexOf(tmpsY0)>-1){
                resNum0 = resNum0 + tmpNum * dic[tmpsY0];
                tmpNum = 0;
            }else{
                tmpNum = dic[tmpsY0];
            }
        }
        resNum0 = resNum0 + tmpNum;
        tmpNum = 0;
        if(sectionY.length>0 && units.indexOf(sectionY.substr(sectionY.length-1,1))>-1){
            resNum0 = resNum0 * dic[sectionY.substr(sectionY.length-1,1)];
        }
        resNum = resNum + resNum0;
        resNum0 = 0;
    }
    for(var i=0,l=sectionW.length-1;i<l;i++){
        var tmpsW = sectionW.substr(i,1);
        if(units.indexOf(tmpsW)>-1){
            resNum0 = resNum0 + tmpNum * dic[tmpsW];
            tmpNum = 0;
        }else{
            tmpNum = dic[tmpsW];
        }
    }
    resNum0 = resNum0 + tmpNum;
    tmpNum = 0;
    if(sectionW.length>0 && units.indexOf(sectionW.substr(sectionW.length-1,1))>-1){
        resNum0 = resNum0 * dic[sectionW.substr(sectionW.length-1,1)];
    }
    resNum = resNum + resNum0;
    resNum0 = 0;
    for(var i=0,l=sectionG.length;i<l;i++){
        var tmpsG = sectionG.substr(i,1);
        if(units.indexOf(tmpsG)>-1){
            resNum0 = resNum0 + tmpNum * dic[tmpsG];
            tmpNum = 0;
        }else{
            tmpNum = dic[tmpsG];
        }
    }
    resNum0 = resNum0 + tmpNum;
    resNum = resNum + resNum0;
    return resNum;
}

做了调整,为了兼容IE。主要是IE不支持把字符串当做数组操作,像下面这样的

var aa="abcde";

var b = aa[2];//b is undefined in IE,but available in FF.

新方法用substr取值即可解决这个兼容问题。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值