有沒有想過將數字格式的計算結果轉化為漢字格式的? 有人會問"干嘛要轉, 數字形式不是蠻好嘛", 可是當這個數字很長的時候就不太容易讀出來了吧, 就算是有千分位的分隔符也不易順口說出, 因為這個符號是位英語行方便的, 不是適合我們的讀法. 那就自己寫一個函數來完成這項任務吧.
將下列代碼加到你的網頁里, 通過num2chi()函數的調用就可以實現上述功能了, 快來試一試吧. 為了各位能讀懂這段代碼, 在下特意加入詳細注解, 還請老鳥們不要嫌羅唆, ^_^.
//----------------------FUNCTION BEGIN----------------------------- //------------------------------------------- //函數名: num2chi() //叁 數: 一數字 //返回值: 一字符串 //功 能: 將難讀的長串數字轉為順口讀出的漢字 //作 者: chen.anson //站 點: HTTP://dreamer.oso.com.cn //-------------------------------------------
function num2chi(result) {
var chiresult = ""; //定義返回值叁數chiresult為字符形式 result = result.toString(); //將result轉為字符形式 result = result.toLowerCase(); resultlen = result.length; //定義resultlen為result的長度 tempresult = result; //定義中間變量tempresult
for (i=1;i<=resultlen;i++) //將字符串tempresult中的全部數字替換為漢字 { tempresult = tempresult.replace("1","一"); tempresult = tempresult.replace("2","二"); tempresult = tempresult.replace("3","三"); tempresult = tempresult.replace("4","四"); tempresult = tempresult.replace("5","五"); tempresult = tempresult.replace("6","六"); tempresult = tempresult.replace("7","七"); tempresult = tempresult.replace("8","八"); tempresult = tempresult.replace("9","九"); tempresult = tempresult.replace("0","零"); tempresult = tempresult.replace(".","點"); tempresult = tempresult.replace("e+","冪"); }
while(tempresult.indexOf("零零")!=-1) //避免字符串tempresult中出現"零零", 但又不能改變字符串長度 { tempresult = tempresult.replace("零零","位零"); }
resultlen = tempresult.length; //再次確認tempresult的長度, 因"e+"->"冪"會引起長度變化
for (i=1,j=1,k=1;i<=resultlen;i++) //開始轉換, i為位數確認叁數, j為"十百千"確認叁數, k為"萬億"確認叁數 { //防止尾數為零, 如八拾零, 二拾零萬 if (tempresult.charAt(resultlen-1)=="零"&&i==1) chiresult = "位"; else if (tempresult.charAt(resultlen-i)=="零"&&j==1) chiresult = "位" + chiresult; //--------------------------------
//避免把"冪"和"點"當做實際位數, 而且單位確認變量重新計數 else if (tempresult.charAt(resultlen-i)=="冪") { j=1;k=1;chiresult = tempresult.charAt(resultlen-i) + chiresult;continue; } else if (tempresult.charAt(resultlen-i)=="點") { j=1;k=1;chiresult = tempresult.charAt(resultlen-i) + chiresult;continue; } //-------------------------------------- else chiresult = tempresult.charAt(resultlen-i) + chiresult; //添加數字單位 if (tempresult.charAt(resultlen-i-1)!="位"&&tempresult.charAt(resultlen-i-1)!="零"&&tempresult.charAt(resultlen-i-1)!="冪") { if (j==1&&i<resultlen) chiresult = "拾" + chiresult; else if (j==2&&i<resultlen) chiresult = "百" + chiresult; else if (j==3&&i<resultlen) chiresult = "千" + chiresult; } if (j==4&&i<resultlen) j=0; if (k==4&&i<resultlen&&tempresult.charAt(resultlen-i-1)!="冪") chiresult = "萬" + chiresult; else if (k==8&&i<resultlen&&tempresult.charAt(resultlen-i-1)!="冪") {k=0;chiresult = "億" + chiresult;} //----------- j++;k++; }
while(chiresult.indexOf("位")!=-1) //避免字符串chiresult中出現"位" { chiresult = chiresult.replace("位",""); }
if (chiresult.substr(0,2)=="一拾") //避免出現"一拾二"等情況 chiresult = chiresult.substring(1,chiresult.length);
//冪和小數點後的數字應直接讀出, 而沒有單位 if (chiresult.search("冪")>=0&&chiresult.search("點")>=0) { rebegin = chiresult.substring(0,chiresult.indexOf("點")); relast = chiresult.substring(chiresult.indexOf("冪"),chiresult.length); remid = chiresult.substring(chiresult.indexOf("點"),chiresult.indexOf("冪")); for (i=1;i<=remid.length;i++) { remid = remid.replace("拾",""); remid = remid.replace("百",""); remid = remid.replace("千",""); remid = remid.replace("萬",""); remid = remid.replace("億",""); } chiresult = rebegin + remid + relast; } else if (chiresult.search("冪")<0&&chiresult.search("點")>=0) { rebegin = chiresult.substring(0,chiresult.indexOf("點")); relast = chiresult.substring(chiresult.indexOf("點"),chiresult.length); for (i=1;i<=relast.length;i++) { relast = relast.replace("拾",""); relast = relast.replace("百",""); relast = relast.replace("千",""); relast = relast.replace("萬",""); relast = relast.replace("億",""); } chiresult = rebegin + relast; }
if (chiresult.search("冪")>=0) //將"冪"替換為"乘以拾的", 這樣可以直接讀出 { chiresult = chiresult.replace("冪","乘以拾的"); chiresult = chiresult + "次方"; } return chiresult; }
//----------------------FUNCTION END-------------------------------
將下面這兩條語句放到script塊中試運行一下看看結果對不對, 另外可以訪問我的主頁http://dreamer.oso.com.cn 在休閑廣場里有一個彩票頁面, 就是用這段代碼實現的, 歡迎光臨. hi='4648000567542450084.16415846E+766600050'; document.write(hi+"<br>"+num2chi(hi));
|