我承認我真的太閒了= =,無聊的我寫了一個將「12345」轉為中文數字「壹萬貳仟參佰肆拾伍元整」的小函式,可是感覺會用到的機率不大,如果哪位有需要就拿去用吧

//========
//使用範例
//========
//壹萬貳仟參佰肆拾伍元整
alert(chineseNumber(12345,'upper'));
//一萬二千三百四十五元整
alert(chineseNumber(12345,'lower'));
//一萬二千三百四十五戰鬥力
alert(chineseNumber(12345,'lower','戰鬥力'));
/*********************************************
* http://liaosankai.pixnet.net/blog
* copyright 2008 sankai
* licensed under the MIT and GPL licenses.
***********************************************/
function chineseNumber(number,lowerorsupper,tail){
    //轉換值是否為整數
    if(!isNaN(parseInt(number * 1))){
		//--------------
        // 定義變數
		//--------------
		//小寫的中文數字
        var chineseNumber_lower = ('〇一二三四五六七八九').split('');
		//大寫的中文數字
        var chineseNumber_upper = ('零壹貳參肆伍陸柒捌玖').split('');
		//數詞單位陣列
		var chineseOrder = ('十百千元萬億兆京垓秭穰溝澗正載').split('');
        if(tail == null){
            chineseOrder[3] = '元整';
        } else{
            chineseOrder[3] = tail;
        }
		//定義儲存轉換後的數字結果陣列
		var transformNumber = new Array();
        //逆轉數字後的數字陣列
		var numberAsString = new Array();
		//用來記錄移動位數的索引(從tail開始)
		var orderFlag = 3;
		//--------------
        // 數字處理
		//--------------
		//將數字字串化
		number = number+'';
		//逆轉數字後儲入陣列
		for (var i=number.length-1; i>=0; i-- ){
       		numberAsString[numberAsString.length++] = number.charAt(i);
		}
		//針對每個英文數字處理
        for(var i=0; i<numberAsString.length; i++){
	        //產生對應的中文數字,並且依大小寫有所不同
            if(lowerorsupper == 'upper'){
                numberAsString[i] = chineseNumber_upper[numberAsString[i]];
				chineseOrder[0] = '拾';
				chineseOrder[1] = '佰';
				chineseOrder[2] = '仟';
            } else {
                numberAsString[i] = chineseNumber_lower[numberAsString[i]];
				chineseOrder[0] = '十';
				chineseOrder[1] = '百';
				chineseOrder[2] = '千';
            }
			//添加數詞
			switch((i+1)%4){
				case 1:
					transformNumber[numberAsString.length-i] = numberAsString[i]+chineseOrder[orderFlag];
				break;
				case 2:
					transformNumber[numberAsString.length-i] = numberAsString[i]+chineseOrder[0];
				break;
				case 3:
					transformNumber[numberAsString.length-i] = numberAsString[i]+chineseOrder[1];
				break
				case 0:
					transformNumber[numberAsString.length-i] = numberAsString[i]+chineseOrder[2];
				break;
			}
			//每處理四個數字後移動位數索引
			if((i+1)%4 == 0){
				orderFlag++;
			}
        }
		//回傳轉換後的中文數字
		return transformNumber.join('');
    } else {
        return '數字必需為整數';
    }
}

不過這個程式仍然有下列的問題:

  1. 輸入10000類的數值,產生的國字數字不是「一萬」,是「壹萬零仟零佰零拾零」
  2. 忘了去判斷小數點的部分
  3. 若考慮尾詞部分,那麼還得考慮小數點部分的接詞,像是幾角幾分之類的

以上若有網友已經有想到解決的方法,歡迎共享修正

arrow
arrow
    全站熱搜

    低溫烘培 發表在 痞客邦 留言(3) 人氣()