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 阅读(378) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: