posts - 3,  comments - 2,  trackbacks - 0




            1 <SCRIPT LANGUAGE="JavaScript">
            2 function convertCurrency(currencyDigits) {
            3 // Constants:
            4  var MAXIMUM_NUMBER = 99999999999.99;
            5  // Predefine the radix characters and currency symbols for output:
            6  var CN_ZERO = "";
            7  var CN_ONE = "";
            8  var CN_TWO = "";
            9  var CN_THREE = "";
           10  var CN_FOUR = "";
           11  var CN_FIVE = "";
           12  var CN_SIX = "";
           13  var CN_SEVEN = "";
           14  var CN_EIGHT = "";
           15  var CN_NINE = "";
           16  var CN_TEN = "";
           17  var CN_HUNDRED = "";
           18  var CN_THOUSAND = "";
           19  var CN_TEN_THOUSAND = "";
           20  var CN_HUNDRED_MILLION = "";
           21  var CN_SYMBOL = "人民幣";
           22  var CN_DOLLAR = "";
           23  var CN_TEN_CENT = "";
           24  var CN_CENT = "";
           25  var CN_INTEGER = "";
           26  
           27 // Variables:
           28  var integral; // Represent integral part of digit number. 
           29  var decimal; // Represent decimal part of digit number.
           30  var outputCharacters; // The output result.
           31  var parts;
           32  var digits, radices, bigRadices, decimals;
           33  var zeroCount;
           34  var i, p, d;
           35  var quotient, modulus;
           36  
           37 // Validate input string:
           38  currencyDigits = currencyDigits.toString();
           39  if (currencyDigits == "") {
           40   alert("Empty input!");
           41   return "";
           42  }
           43  if (currencyDigits.match(/[^,.\d]/!= null) {
           44   alert("Invalid characters in the input string!");
           45   return "";
           46  }
           47  if ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/== null) {
           48   alert("Illegal format of digit number!");
           49   return "";
           50  }
           51  
           52 // Normalize the format of input digits:
           53  currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters.
           54  currencyDigits = currencyDigits.replace(/^0+/""); // Trim zeros at the beginning. 
           55  // Assert the number is not greater than the maximum number.
           56  if (Number(currencyDigits) > MAXIMUM_NUMBER) {
           57   alert("Too large a number to convert!");
           58   return "";
           59  }
           60 // http://www.knowsky.com/ Process the coversion from currency digits to characters:
           61  // Separate integral and decimal parts before processing coversion:
           62  parts = currencyDigits.split(".");
           63  if (parts.length > 1) {
           64   integral = parts[0];
           65   decimal = parts[1];
           66   // Cut down redundant decimal digits that are after the second.
           67   decimal = decimal.substr(02);
           68  }
           69  else {
           70   integral = parts[0];
           71   decimal = "";
           72  }
           73  // Prepare the characters corresponding to the digits:
           74  digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT,CN_NINE);
           75  radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND);
           76  bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION);
           77  decimals = new Array(CN_TEN_CENT, CN_CENT);
           78  // Start processing:
           79  outputCharacters = "";
           80  // Process integral part if it is larger than 0:
           81  if (Number(integral) > 0) {
           82   zeroCount = 0;
           83   for (i = 0; i < integral.length; i++) {
           84    p = integral.length - i - 1;
           85    d = integral.substr(i, 1);
           86    quotient = p / 4;
           87    modulus = p % 4;
           88    if (d == "0") {
           89     zeroCount++;
           90    }
           91    else {
           92     if (zeroCount > 0)
           93     {
           94      outputCharacters += digits[0];
           95     }
           96     zeroCount = 0;
           97     outputCharacters += digits[Number(d)] + radices[modulus];
           98    }
           99    if (modulus == 0 && zeroCount < 4) { 
          100 
          101 
          102     outputCharacters += bigRadices[quotient];
          103    }
          104   }
          105   outputCharacters += CN_DOLLAR;
          106  }
          107  // Process decimal part if there is:
          108  if (decimal != "") {
          109   for (i = 0; i < decimal.length; i++) {
          110    d = decimal.substr(i, 1);
          111    if (d != "0") {
          112     outputCharacters += digits[Number(d)] + decimals[i];
          113    }
          114   }
          115  }
          116  // Confirm and return the final output string:
          117  if (outputCharacters == "") {
          118   outputCharacters = CN_ZERO + CN_DOLLAR;
          119  }
          120  if (decimal == "") {
          121   outputCharacters += CN_INTEGER;
          122  }
          123  //outputCharacters = CN_SYMBOL + outputCharacters;
          124  outputCharacters = outputCharacters;
          125  return outputCharacters;
          126 }// 
          127 
          128 var stmp = "";
          129 function nst_convert(t)
          130 {
          131    if(t.value==stmp) return;//如果等于上次輸入則返回
          132    var ms = t.value.replace(/[^\d\.]/g,"").replace(/(\.\d{2}).+$/,"$1").replace(/^0+([1-9])/,"$1").replace(/^0+$/,"0");
          133    //replace(/[^\d\.]/g,"")去掉輸入當中不是數字和.的字符
          134    //replace(/(\.\d{2}).+$/,"$1") 
          135    //匹配從字符開始的第一個.后面的所有字符,由于沒有使用g標記,
          136    //所以只匹配開始第一次   然后用小數點和后兩位進行替換以確定數值最后的格式正確 高.
          137    //replace(/^0+([1-9])/,"$1") 匹配以多個0開頭的數值替換為去掉0后的數值做為數字的第一位 也是匹配開始的一次.
          138    //replace(/^0+$/,"0") 匹配以0開始和結束的多個0為一個0 也就是0000000 輸入->轉換成一個0
          139    //以下確定輸入的為過濾后的合法數字
          140    //alert(ms);
          141    var txt = ms.split(".");
          142    //alert(txt[0]);
          143    //如果ms值不小數點存在則txt[0]=小數點前的值否則等于ms
          144    //regexp:/\d{4}(,|$)/ 匹配四位數字和,的集合或者四位數字和字符結尾的集合
          145    while(/\d{4}(,|$)/.test(txt[0]))//如果為txt[0]=4123
          146      txt[0= txt[0].replace(/(\d)(\d{3}(,|$))/,"$1,$2");
          147    //txt[0].replace(/(\d)(\d{3}(,|$))/,"$1,$2")是將txt[0]進行替換后再賦給它
          148    //regexp:/(\d)(\d{3}(,|$))/ 將四個數字份為兩組第一個數字為第一位,后三位和其他結尾為每二位
          149    //并替換成 第一位,第二位 注意 ,的使用很好.   也就是將4123先替換成4,123
          150    //由于此表達式默認采用貪婪匹配所以從數值后向前匹配再通過循環進行再匹配替換從而可以將
          151    //12345678分成你想要的123,456,78 樓主彩用(,|$)很精典,因為它略去了第二次匹配時的,問題
          152    t.value = stmp = txt[0]+(txt.length>1?"."+txt[1]:"");
          153    //最終賦值到輸入框中  
          154    //如果有小數點則加上并購成最終數字否則顯示替換后的txt[0]
          155    bbb.value = convertCurrency(ms-0);
          156    //將ms轉換為數字送到number2num1去轉換
          157 }
          158 
          159 </SCRIPT>
          160 
          161 小寫金額:<input type="text" name="aaa" id="aaa" onkeyup="nst_convert(this)"><br>
          162 大寫金額:<input type="text" name="bbb" id="bbb" size=80>
          163 
          164 
          165 
          posted on 2008-12-13 00:15 sw0rd 閱讀(382) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 齐河县| 囊谦县| 贵州省| 连江县| 大城县| 苗栗市| 特克斯县| 英山县| 莱西市| 遂昌县| 车险| 乐清市| 昌邑市| 原阳县| 项城市| 沙洋县| 将乐县| 通化市| 崇明县| 乌兰浩特市| 陆河县| 甘孜| 安义县| 顺平县| 策勒县| 偃师市| 迁西县| 澄江县| 闵行区| 石棉县| 西华县| 盐源县| 兴城市| 津市市| 环江| 根河市| 辽宁省| 林州市| 嘉祥县| 广水市| 高州市|