人民币大写转化函数(ASP版和JavaScript版)

ASP 版:

<%
'文 件 名:cmycur.asp
'作    者:二十四画生
'版    本:1.0
'简    介:转换函数文件。
'功能描述:转换货币形式的函数。(该文件包含两个函数,一个转换成一般货币形式cmycur(num),一个转换成大写形式cmycurd(num))
%>
<%
function cmycur(num) '转换为货币形式如:¥180.00元
  dim thenum
  if isnull(num) or num = "" then
    cmycur = " "
  else
    num = Round(num,2)
 thenum = FormatCurrency(num,2,-1)
 cmycur = thenum & "元"
  end if
end function

function cmycurd(num) 'num为要转换成大写的金额
  dim str1  '如下定义
  dim str2  '如下定义
  dim str3  '从原num值中取出的值
  dim i   '循环变量
  dim j   'num的值乘以100的字符串长度
  dim ch1  '数字的汉语读法
  dim ch2  '数字位的汉字读法
  dim nzero  '用来计算连续的零值是几个

  str1 = "零壹贰叁肆伍陆柒捌玖"
  str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"
  nzero = 0
  if isnull(num) or num = "" then
    cmycurd = " "
    exit function
  end if
  num = Round(Abs(num),2) '将num取绝对值并四舍五入取2位小数
  j = Len(CStr(num * 100))  '找出最高位
  if j > 15 then
    cmycurd = "溢出"
    exit function
  end if
  str2 = Right(str2, j) '取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分
 
  '循环取出每一位需要转换的值
  for i = 1 to j
    str3 = Mid(num * 100, i, 1) '取出需转换的某一位的值
 if i <> (j - 3) + 1 and i <> (j - 7) + 1 and i <> (j - 11) + 1 and i <>(j - 15) + 1 then    '当所取位数不为元、万、亿、万亿上的数字时
   if str3 = 0 then
     ch1 = ""
     ch2 = ""
  nzero = nzero + 1
   elseif str3 <> 0 and nzero <> 0 then
     ch1 = "零" & Mid(str1, clng(str3) + 1, 1)
        ch2 = Mid(str2, i, 1)
        nzero = 0
      else
     ch1 = Mid(str1, CLng(str3) + 1, 1)
        ch2 = Mid(str2, i, 1)
        nzero = 0
      end if
    else '该位是万亿,亿,万,元位等关键位
      if str3 <> 0 and nzero <> 0 then
        ch1 = "零" & Mid(str1, clng(str3) + 1, 1)
        ch2 = Mid(str2, i, 1)
        nzero = 0
      elseif str3 <> 0 and nzero = 0 Then
        ch1 = Mid(str1, clng(str3) + 1, 1)
        ch2 = Mid(str2, i, 1)
        nzero = 0
      elseif str3 = 0 and nzero >= 3 Then
        ch1 = ""
        ch2 = ""
        nzero = nzero + 1
      elseif j > 10 Then  '当为整亿以上的时候,会多添加一个万,因此把这种情况去掉
        ch1 = ""
        nzero = nzero + 1
   else
     ch1 = ""
  ch2 = Mid(str2, i, 1)
  nzero = nzero + 1
      end if
      if i = (j - 11) + 1 Or i = (j - 3) + 1 Then '如果该位是亿位或元位,则必须写上
        ch2 = Mid(str2, i, 1)
      end if
    end if

    cmycurd = cmycurd & ch1 & ch2

    if i = j and str3 = 0 Then '最后一位(分)为0时,加上“整”
      cmycurd = cmycurd & "整"
    end if
  next

  if num = 0 then
    cmycurd="零元整"
  end if
end function
%>

JavaScript版:

function cmycurd(num){  //转成人民币大写金额形式
  var str1 = '零壹贰叁肆伍陆柒捌玖';  //0-9所对应的汉字
  var str2 = '万仟佰拾亿仟佰拾万仟佰拾元角分'; //数字位所对应的汉字
  var str3;    //从原num值中取出的值
  var str4;    //数字的字符串形式
  var str5 = '';  //人民币大写金额形式
  var i;    //循环变量
  var j;    //num的值乘以100的字符串长度
  var ch1;    //数字的汉语读法
  var ch2;    //数字位的汉字读法
  var nzero = 0;  //用来计算连续的零值是几个
 
  num = Math.abs(num).toFixed(2);  //将num取绝对值并四舍五入取2位小数
  str4 = (num * 100).toFixed(0).toString();  //将num乘100并转换成字符串形式
  j = str4.length;      //找出最高位
  if (j > 15){return '溢出';}
  str2 = str2.substr(15-j);    //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分
 
  //循环取出每一位需要转换的值
  for(i=0;i<j;i++){
    str3 = str4.substr(i,1);   //取出需转换的某一位的值
    if (i != (j-3) && i != (j-7) && i != (j-11) && i != (j-15)){    //当所取位数不为元、万、亿、万亿上的数字时
   if (str3 == '0'){
     ch1 = '';
     ch2 = '';
  nzero = nzero + 1;
   }
   else{
     if(str3 != '0' && nzero != 0){
       ch1 = '零' + str1.substr(str3*1,1);
          ch2 = str2.substr(i,1);
          nzero = 0;
  }
  else{
    ch1 = str1.substr(str3*1,1);
          ch2 = str2.substr(i,1);
          nzero = 0;
        }
   }
 }
 else{ //该位是万亿,亿,万,元位等关键位
      if (str3 != '0' && nzero != 0){
        ch1 = "零" + str1.substr(str3*1,1);
        ch2 = str2.substr(i,1);
        nzero = 0;
      }
      else{
     if (str3 != '0' && nzero == 0){
          ch1 = str1.substr(str3*1,1);
          ch2 = str2.substr(i,1);
          nzero = 0;
  }
        else{
    if (str3 == '0' && nzero >= 3){
            ch1 = '';
            ch2 = '';
            nzero = nzero + 1;
       }
       else{
      if (j >= 11){
              ch1 = '';
              nzero = nzero + 1;
   }
   else{
     ch1 = '';
     ch2 = str2.substr(i,1);
     nzero = nzero + 1;
   }
          }
  }
   }
 }
    if (i == (j-11) || i == (j-3)){  //如果该位是亿位或元位,则必须写上
        ch2 = str2.substr(i,1);
    }
    str5 = str5 + ch1 + ch2;
   
    if (i == j-1 && str3 == '0' ){   //最后一位(分)为0时,加上“整”
      str5 = str5 + '整';
    }
  }
  if (num == 0){
    str5 = '零元整';
  }
  return str5;
}

还有一个C#版的没有贴出来,原理差不多,大家自己写吧!

阅读更多
个人分类: ASP
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭