注:
不支持首位“一”省略的写法,比如“十八”就需要写成“一十八”才行;
末尾的计数单位也不支持省略,比如“五百八”就需要写成“五百八十”才行;
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取值即可解决这个兼容问题。