我承認我真的太閒了= =,無聊的我寫了一個將「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 '數字必需為整數'; } }
不過這個程式仍然有下列的問題:
- 輸入10000類的數值,產生的國字數字不是「一萬」,是「壹萬零仟零佰零拾零」
- 忘了去判斷小數點的部分
- 若考慮尾詞部分,那麼還得考慮小數點部分的接詞,像是幾角幾分之類的
以上若有網友已經有想到解決的方法,歡迎共享修正
全站熱搜