将人民币数字转换成大写形式[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 laserlu 的 blog

用javascript编写了一功能函数,完成如下功能:

1、对一给定字符串,如:1234.55,转换成正确的中文货币描述:如:人民币壹仟贰佰叁拾四元五角五分

2、输入的字符串形式可以是以下几种:带分隔符的,如:123,456,789.00;不带分隔符的,如:123456789

3、输出的中文货币描述要符合规范,如:0.3----人民币三角;0.33----人民币三角三分;1----人民币壹元整
   100----人民币壹佰元整;1001----人民币壹仟零壹元整;10000001----人民币壹仟万零壹元整;
   1001001----人民币壹仟零壹万零壹元整,等

4、最大转换能到百亿

具体的代码如下:

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
 <head>
  <title></title>
  <script language="jscript">
function convertcurrency(currencydigits) {
// constants:
 var maximum_number = 99999999999.99;
 // predefine the radix characters and currency symbols for output:
 var cn_zero = "零";
 var cn_one = "壹";
 var cn_two = "贰";
 var cn_three = "叁";
 var cn_four = "肆";
 var cn_five = "伍";
 var cn_six = "陆";
 var cn_seven = "柒";
 var cn_eight = "捌";
 var cn_nine = "玖";
 var cn_ten = "拾";
 var cn_hundred = "佰";
 var cn_thousand = "仟";
 var cn_ten_thousand = "万";
 var cn_hundred_million = "亿";
 var cn_symbol = "人民币";
 var cn_dollar = "元";
 var cn_ten_cent = "角";
 var cn_cent = "分";
 var cn_integer = "整";
 
// variables:
 var integral; // represent integral part of digit number.
 var decimal; // represent decimal part of digit number.
 var outputcharacters; // the output result.
 var parts;
 var digits, radices, bigradices, decimals;
 var zerocount;
 var i, p, d;
 var quotient, modulus;
 
// validate input string:
 currencydigits = currencydigits.tostring();
 if (currencydigits == "") {
  alert("empty input!");
  return "";
 }
 if (currencydigits.match(/[^,.\d]/) != null) {
  alert("invalid characters in the input string!");
  return "";
 }
 if ((currencydigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) {
  alert("illegal format of digit number!");
  return "";
 }
 
// normalize the format of input digits:
 currencydigits = currencydigits.replace(/,/g, ""); // remove comma delimiters.
 currencydigits = currencydigits.replace(/^0+/, ""); // trim zeros at the beginning.
 // assert the number is not greater than the maximum number.
 if (number(currencydigits) > maximum_number) {
  alert("too large a number to convert!");
  return "";
 }
 
// process the coversion from currency digits to characters:
 // separate integral and decimal parts before processing coversion:
 parts = currencydigits.split(".");
 if (parts.length > 1) {
  integral = parts[0];
  decimal = parts[1];
  // cut down redundant decimal digits that are after the second.
  decimal = decimal.substr(0, 2);
 }
 else {
  integral = parts[0];
  decimal = "";
 }
 // prepare the characters corresponding to the digits:
 digits = new array(cn_zero, cn_one, cn_two, cn_three, cn_four, cn_five, cn_six, cn_seven, cn_eight, cn_nine);
 radices = new array("", cn_ten, cn_hundred, cn_thousand);
 bigradices = new array("", cn_ten_thousand, cn_hundred_million);
 decimals = new array(cn_ten_cent, cn_cent);
 // start processing:
 outputcharacters = "";
 // process integral part if it is larger than 0:
 if (number(integral) > 0) {
  zerocount = 0;
  for (i = 0; i < integral.length; i++) {
   p = integral.length - i - 1;
   d = integral.substr(i, 1);
   quotient = p / 4;
   modulus = p % 4;
   if (d == "0") {
    zerocount++;
   }
   else {
    if (zerocount > 0)
    {
     outputcharacters += digits[0];
    }
    zerocount = 0;
    outputcharacters += digits[number(d)] + radices[modulus];
   }
   if (modulus == 0 && zerocount < 4) {
    outputcharacters += bigradices[quotient];
   }
  }
  outputcharacters += cn_dollar;
 }
 // process decimal part if there is:
 if (decimal != "") {
  for (i = 0; i < decimal.length; i++) {
   d = decimal.substr(i, 1);

本文关键:人民币转换
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top