注册 登录
编程论坛 ASP技术论坛

高手请教!阿拉伯数字自动转换成中文大写的问题?急!

弥加辣瓜 发布于 2011-08-12 11:24, 538 次点击
高手请教,想输入阿拉伯数字后,自动生成中文大写,因为是新手,学习中,不知道怎么实现,能给个代码嘛,可以好好学习!!!自己的要求不是很高,可以不用数据库,就是在静态页面的输入框中输入阿拉伯数字的金额,然后再它的后面显示出大写金额,这样实现就可以可以了,就谢谢!
2 回复
#2
yms1232011-08-12 13:01
程序代码:

'主函数
'
调用方法
'
Response.Write ConvertSum(CStr(123.50))
Function ConvertSum(str)
  if IsPositveDecimal(str)=False Then
     ConvertSum="输入的不是正数字!"
  Else  
     if CDbl(str)>999999999999.99 Then
        ConvertSum="数字太大,无法换算,请输入一万亿元以下的金额"
     else  
        Dim splitstr '定义按小数点分割后的字符串数组
        splitstr=Split(str,".")'按小数点分割字符串   
        if UBound(splitstr)=0 Then'只有整数部分
            ConvertSum=ConvertData(str)&"圆整"
        else '有小数部分
            Dim rstr
            rstr=ConvertData(splitstr(0))&""'转换整数部分
            rstr=rstr&ConvertXiaoShu(splitstr(1))'转换小数部分
            ConvertSum=rstr
        End IF
     End IF
  End IF  
End Function

'判断是否是正数字字符串
'
判断字符串
'
如果是数字,返回true,否则返回false
Function IsPositveDecimal(str)
  On Error Resume Next
  IF VarType(CInt(str))<>2 Then
     IsPositveDecimal=False
  Else
     IsPositveDecimal=True
  End IF
End Function

'转换数字(整数)
'
需要转换的整数数字字符串
'
转换成中文大写后的字符串
Function ConvertData(str)
  Dim tmpstr
  Dim rstr
  Dim strlen
  strlen=Len(str)
  if strlen<=4 Then'数字长度小于四位
     rstr=ConvertDigit(str)
  else
     if strlen<=8 Then '数字长度大于四位,小于八位
        tmpstr=Mid(str,strlen-4,4)'先截取最后四位数字
        rstr=ConvertDigit(tmpstr)'转换最后四位数字
        tmpstr=Mid(str,1,strlen-4)'截取其余数字
        '将两次转换的数字加上萬后相连接
        rstr=ConvertDigit(tmpstr)&""&rstr
        rstr=Replace(rstr,"零萬","")
        rstr=Replace(rstr,"零零","")
    else
        if strlen<=12 Then'数字长度大于八位,小于十二位
           tmpstr=Mid(str,strlen-4,4)'先截取最后四位数字
           rstr=ConvertDigit(tmpstr)'转换最后四位数字
           tmpstr=Mid(str,strlen-8,4)'再截取四位数字
           rstr=ConvertDigit(tmpstr)&""&rstr
           tmpstr=Mid(str,1,strlen-8)
           rstr=ConvertDigit(tmpstr)&""&rstr
           rstr=Replace(rstr,"零億","")
           rstr=Replace(rstr,"零萬","")
           rstr=Replace(rstr,"零零","")
           rstr=Replace(rstr,"零零","")
       End IF
   End IF
End IF
strlen=Len(rstr)
if strlen>=2 Then
    select case Mid(rstr,strlen-2,2)
        case "佰零"
           rstr=Mid(rstr,1,strlen-2)&""
        case "仟零"
           rstr=Mid(rstr,1,strlen-2)&""
        case "萬零"
           rstr=Mid(rstr,1,strlen-2)&""
        case "億零"
           rstr=Mid(rstr,1,strlen-2)&""
     End select
  End IF
  ConvertData=rstr
End Function
'转换数字(小数部分)
'
需要转换的小数部分数字字符串
'
转换成中文大写后的字符串
Function ConvertXiaoShu(str)
  Dim strlen
  strlen=Len(str)
  Dim rstr
  if strlen=1 Then
      rstr=ConvertChinese(str)&""
      ConvertXiaoShu=rstr
  else
     Dim tmpstr
     tmpstr=Mid(str,1,1)
     rstr=ConvertChinese(tmpstr)&""
     tmpstr=Mid(str,2,1)
     rstr=rstr&ConvertChinese(tmpstr)&""
     rstr=Replace(rstr,"零分","")
     rstr=Replace(rstr,"零角","")
     ConvertXiaoShu=rstr
  End If
End Function

'转换数字
'
转换的字符串(四位以内)  
Function ConvertDigit(str)
  Dim strlen
  strlen=Len(str)
  Dim rstr
  select case strlen  
      case 1
        rstr=ConvertChinese(str)
      case 2
        rstr=Convert2Digit(str)
      case 3
        rstr=Convert3Digit(str)
      case 4
        rstr=Convert4Digit(str)
    end select
    rstr=Replace(rstr,"拾零","")
    strlen=Len(rstr)
    ConvertDigit=rstr
End Function

'转换四位数字  
Function Convert4Digit(str)
  Dim str1,str2,str3,str4
  str1=Mid(str,1,1)
  str2=Mid(str,2,1)
  str3=Mid(str,3,1)
  str4=Mid(str,4,1)
  Dim rstring
  rstring=rstring&ConvertChinese(str1)&""
  rstring=rstring&ConvertChinese(str2)&""
  rstring=rstring&ConvertChinese(str3)&""
  rstring=rstring&ConvertChinese(str4)
  rstring=Replace(rstring,"零仟","")
  rstring=Replace(rstring,"零佰","")
  rstring=Replace(rstring,"零拾","")
  rstring=Replace(rstring,"零零","")
  rstring=Replace(rstring,"零零","")
  rstring=Replace(rstring,"零零","")
  Convert4Digit=rstring
End Function

'转换三位数字
Function Convert3Digit(str)
  Dim str1,str2,str3
  str1=Mid(str,1,1)
  str2=Mid(str,2,1)
  str3=Mid(str,3,1)
  Dim rstring
  rstring=rstring&ConvertChinese(str1)&""
  rstring=rstring&ConvertChinese(str2)&""
  rstring=rstring&ConvertChinese(str3)
  rstring=Replace(rstring,"零佰","")
  rstring=Replace(rstring,"零拾","")
  rstring=Replace(rstring,"零零","")
  rstring=Replace(rstring,"零零","")
Convert3Digit=rstring
End Function

'转换二位数字
Function Convert2Digit(str)
  Dim str1,str2
  str1=Mid(str,1,1)
  str2=Mid(str,2,1)
  Dim rstring
  rstring=rstring&ConvertChinese(str1)&""
  rstring=rstring&ConvertChinese(str2)
  rstring=Replace(rstring,"零拾","")
  rstring=Replace(rstring,"零零","")
  Convert2Digit=rstring
End Function

'将一位数字转换成中文大写数字
Function ConvertChinese(str)
  '"零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分"
  Dim cstr
  select case(str)
     case "0"
        cstr=""
     case "1"
        cstr=""
     case "2"
        cstr=""
     case "3"
        cstr=""
     case "4"
        cstr=""
     case "5"
        cstr=""
     case "6"
        cstr=""
     case "7"
        cstr=""
     case "8"
        cstr=""
     case "9"
        cstr=""
   end select
  ConvertChinese=cstr
End Function

测试后的代码

[ 本帖最后由 yms123 于 2011-8-12 13:36 编辑 ]
#3
towering2011-08-14 13:55
版主提供的这个东东太有用了,收藏,谢谢!
1