我承認我真的太閒了= =,無聊的我寫了一個將「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類的數值,產生的國字數字不是「一萬」,是「壹萬零仟零佰零拾零」
- 忘了去判斷小數點的部分
- 若考慮尾詞部分,那麼還得考慮小數點部分的接詞,像是幾角幾分之類的
以上若有網友已經有想到解決的方法,歡迎共享修正
文章標籤
全站熱搜

1) 輸入10000類的數值,產生的國字數字不是「一萬」,是「壹萬零仟零佰零拾零」 用mod試試
感謝你的通知,不過這個bug好像不好弄>"<,我得重試多次才行。不過最近時間不夠,可能要等有空的時候我再來想如何解決了
function chineseNumber(alaberNumber){ var chineseNumber = ("零壹貳參肆伍陸柒捌玖").split(''); var amountSmallUnit = ['','拾','佰','仟']; var amountBigUnit = ['','萬','億','兆','京','垓','秭','穰','溝','澗','正','載']; var alaberNumberSplit = new Array(); var alaberNumberSplitCount = parseInt(alaberNumber.length/4); for(var i=0;i<=alaberNumberSplitCount;i++){ if(i==0&&alaberNumber.length%4!=0){ alaberNumberSplit[i] = alaberNumber.substr(0,alaberNumber.length%4); alaberNumber = alaberNumber.slice(alaberNumber.length%4); }else if(alaberNumber!=''){ alaberNumberSplit[i] = alaberNumber.substr(0,4); alaberNumber = alaberNumber.slice(4); } } var chineseBigNumber = ''; for(var i=0;i2010-01-08 10:02 
低溫烘培 2010-01-08 10:19
謝謝您,不過目前還沒有遇到相關的需求,不過哪天開始要寫跟金流有關的時候,就必需使用到了=v=,數詞我也是那時候寫的時候,查wiki才知道有那麼多,還滿有趣的
看了您的script,以及吳小頭更改的那個,結合起來,感覺很適合我最近要用的文檔。 但是我想要精確到小數點後兩位,不知道大神是否有解決方案呢?如果有的話,請email我, 謝謝! btcniamarketing@gmail.com