1. 程式人生 > >將一串數字轉為大寫人民幣形式

將一串數字轉為大寫人民幣形式

數字轉人民幣大寫形式

function toChinese(str){
//大寫數字
var arrNum = ['零','壹','貳','叄','肆','伍','陸','柒','捌','玖']
// 基本單位
var Intdanwei1 = ['','拾','佰','仟'];
var Intdanwei2 = ['','萬','億','兆'];
var Floatdanwei = ['角','分','毫','釐']

var zheng = "整";
var yuan = '元';

//最大數字
var maxNum = 9999999999999999.9999
//整數部分
var zhengNum;
//小數部分
var floatNum;
//裝整形和小數的陣列
var parts;
//輸出的字串
var chinese = '';

//引數為空
if(str == ''){
    return '';
}
//引數不為空時
str = parseFloat(str)
//最大數字
if( str > maxNum){
    return '';
}
//如果傳的數字為0
if(str == 0){
    chinese = arrNum[0] + zheng + yuan;
}
//如果傳的數字不為0;
str = str.toString();

//判斷str是否有小數點
if(str.indexOf('.') == -1){
    zhengNum = str;
    floatNum = '';
}else{
    parts = str.split('.'); //以點分割為陣列
    zhengNum = parts[0];    //整數部分
    floatNum = parts[1].substr(0,4); //保留四位小數
}

//整數部分轉換  
if(parseInt(zhengNum,10) > 0){
    var count = 0;
    var lens = zhengNum.length;
    for(var i = 0 ; i < lens; i++){
        //每次迴圈擷取一個字元
        var n = zhengNum.substr(i,1);
        //擷取的字元在字串中的位置
        var p = lens - i - 1;
        //根據結果匹配單位
        var q = p/4;
        //根據結果匹配單位
        var m = p%4;
        if(n == '0'){  //新增'零'
            count++;
        }else{
            if(count > 0){
                //新增'零'
                chinese += arrNum[0];
                //恢復count值為0;
                count = 0;
            }
            chinese += arrNum[Number(n)] + Intdanwei1[m]
        }
        //如果m=0,那麼當前字串的位置為4的倍數,根據單位的特點,4位一分割,取得當前字串的單位
        if(m == 0){
            chinese += Intdanwei2[q]
        }
    }
    chinese += yuan;
}

//小數部分轉換
if(floatNum != ''){
    var floatLen = floatNum.length;
    for(var i = 0 ; i < floatLen; i++){
        var n = floatNum.substr(i,1);
        if(n != '0'){
            chinese += arrNum[parseInt(n)] + Floatdanwei[i]
        }
    }
}else{
    chinese += zheng;
};

if(chinese == ''){
     chinese = arrNum[0] + zheng + yuan;
 }
return chinese;
}