⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decimaltoenglishext.txt

📁 <数字转换汉字大写和英文读法的几个函数> 很早以前写的一个数字转换汉字大写和英文读法的几个函数,02年还修改过,可应用于delphi和Powerbuider,有兴趣的朋友可以改成其他
💻 TXT
字号:
/*------------------数字转换为英文函数B---------------------------------------
参数介绍:Num(String类型)
          Cntype(integer类型)
	          0--通用格式(最高数位Million百万)
             1--美式格式(最高数位Trillion万亿)
             2--英式格式(最高数位Trillion百亿亿)
*/
string int_str,dec_str//整数部分和小数部分
string n[0 to 90]//数位名称定义
string Result
integer digit
string minus//数字正负性
integer Numlen,decpos

//初始化
if (Cntype<>0) and (CnType<>1) and (CnType<>2) then 
	messageBox('参数错误','参数错误:选择转换类型参数值错误!',StopSign!)
	return('')
end if
if trim(num)='' then
	MessageBox('参数错误','参数不能为空',StopSign!)
	return('')
end if
result=''//初始化结果字符
//初始化关键字
n[0]='Zero';n[6]='Six';n[12]='Twelve';n[18]='Eighteen';
n[1]='One';n[7]='Seven';n[13]='Thirteen';n[19]='Nineteen';
n[2]='Two';n[8]='Eight';n[14]='Fourteen';n[20]='Twenty';
n[3]='Three';n[9]='Nine';n[15]='Fifteen';
n[4]='Four';n[10]='Ten';n[16]='Sixteen';
n[5]='Five';n[11]='Eleven';n[17]='Seventeen';
n[30]='Thirty';n[50]='Fifty';n[70]='Seventy';n[90]='Ninety';
n[40]='Forty';n[60]='Sixty';n[80]='Eighty';
Minus=''
if mid(num,1,1)='-' then
	Num=mid(num,2,len(num)-1)
	Minus='Minus '
end if//得到正负号
//初始化完毕
      
		Numlen=len(num)//得到数字长度
      //校验Num的数字格式是否有效
      //先校验参数number是不是数字格式
      //校验是否只有一个小数点
      Decpos=0
      for digit=1 to Numlen 
       if mid(Num,digit,1)='.' then Decpos=Decpos+1
   	next
      if Decpos>1 then 
		 messageBox('参数错误','参数错误:不是数字格式!',StopSign!)
       return('')
      end if
      //校验是否含有非数字和'.'的字母存在
      for digit=1 to Numlen
       if mid(Num,digit,1)='.' then continue
		 if asc(mid(Num,digit,1))<48 or asc(mid(Num,digit,1))>57 then
        num='error'
        exit
       end if
   	next
      if num='error' then 
        messageBox('参数错误','参数错误:不是数字格式!',StopSign!)
        return('')
      end if
      digit=pos(num,'.')//得到小数点位置
      //分别得到整数部分和小数部分
      if pos(num,'.')>0 then
            int_str=mid(num,1,digit - 1)
            dec_str=mid(num,digit+1,Numlen -digit)
            //消除小数后面多余的0
            do while mid(Dec_str,len(Dec_str),1)='0' 
              Dec_str=mid(Dec_str,1,len(Dec_str) -1)
		   	loop            
      else
            int_str=num
            dec_str=''
      end if
      //消除整数部分前面的多余的0
      do while mid(int_str,1,1)='0' 
        int_str=mid(int_str,2,len(int_str)-1)
	   loop
      if int_str='' then int_str='0'
		
      //*********************开始分析整数部分**************************
		//**********分析只有一~三位数的情况
      if len(int_str)<=3 then
        if int_str='0' then//等于0
           result='zero'
        else        
         if dec(int_str)<=20 then//小于等于20
          result=n[dec(int_str)]//直接读取名称
         else         
           if dec(int_str)<100 then//小于100
                 if mid(int_str,2,1)='0' then//整十
                       result=n[dec(int_str)]
                 else
                       result=n[dec(mid(int_str,1,1)+'0')]+' '+n[dec(mid(int_str,2,1))]//组合几十几
					  end if
           end if
         end if
         if dec(int_str)>=100 then//大于100         
                if (mid(int_str,2,1)='0') and (mid(int_str,3,1)='0') then
                    result=n[dec(mid(int_str,1,1))]+' Hundred'
                else
                    result=n[dec(mid(int_str,1,1))]+' Hundred and '+DecimalToEnglishExt(mid(int_str,2,1)+mid(int_str,3,1),0)
					 end if
         end if
        end if
	   end if
		
		//*************分析有四~六位数的情况
      if (len(int_str)>=4) and (len(int_str)<=6) then
        if dec(mid(int_str,len(int_str)-2,3))=0 then//后面全是0
         result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-3),0)+' Thousand'
        else
           if mid(int_str,len(int_str)-2,1)='0' then//百位为0,加and
            result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-3),0)+' Thousand and '+DecimalToEnglishExt(mid(int_str,len(int_str)-2,3),0)
           else
            if mid(int_str,len(int_str)-1,2)='00' then//是整百,加and
             result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-3),0)+' Thousand and '+DecimalToEnglishExt(mid(int_str,len(int_str)-2,3),0)
            else
             result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-3),0)+' Thousand '+DecimalToEnglishExt(mid(int_str,len(int_str)-2,3),0)
            end if
			  end if
        end if
      end if
		
		//**********分析七~九位数的情况
      if (len(int_str)>=7) and ((len(int_str)<=9)) then
        if dec(mid(int_str,len(int_str)-5,6))=0 then//如果后面6位全是0
         result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-6),0)+' Million'
        else
         /*if pos('and',LowerCase(DecimalToEnglishExt(dec(mid(int_str,len(int_str)-5,6)))))=0 then
          result=DecimalToEnglishExt(dec(mid(int_str,1,len(int_str)-6)),0)+' Million and '+DecimalToEnglishExt(dec(mid(int_str,len(int_str)-5,6)))
         else*/
          result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-6),0)+' Million,'+DecimalToEnglishExt(mid(int_str,len(int_str)-5,6),0)
        end if
      end if
		
		//**********分析十~十二位数的情况
      if (len(int_str)>=10) and ((len(int_str)<=12)) then
       choose case Cntype 
			case 0//普通格式         
          if dec(mid(int_str,len(int_str)-5,6))=0 then//如果后面6位全是0
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-6),0)+' Million'
          else
           /*if pos('and',LowerCase(DecimalToEnglishExt(dec(mid(int_str,len(int_str)-5,6)),0)))=0 then
            result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-6),0)+' Million and '+DecimalToEnglishExt(dec(mid(int_str,len(int_str)-5,6)))
           else*/
            result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-6),0)+' Million,'+DecimalToEnglishExt(mid(int_str,len(int_str)-5,6),0)
          end if 
		   case 1//美式格式
          if dec(mid(int_str,len(int_str)-8,9))=0 then//如果后面9位全是0
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-9),0)+' Billion'
          else
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-9),0)+' Billion,'+DecimalToEnglishExt(mid(int_str,len(int_str)-8,9),1)
          end if
		   case 2//英式格式
          if dec(mid(int_str,len(int_str)-8,9))=0 then//如果后面9位全是0
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-9),0)+' Milliard'
          else
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-9),0)+' Milliard,'+DecimalToEnglishExt(mid(int_str,len(int_str)-8,9),2)
          end if
       end choose
		end if
		
		//*************分析十三~十八位数的情况
      if (len(int_str)>=13) and ((len(int_str)<=18)) then
       choose case Cntype 
			case 0//普通格式
          if dec(mid(int_str,len(int_str)-5,6))=0 then//如果后面6位全是0
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-6),0)+' Million'
          else
           /*{if pos('and',LowerCase(DecimalToEnglishExt(dec(mid(int_str,len(int_str)-5,6)),0)))=0 then
            result=DecimalToEnglishExt(dec(mid(int_str,1,len(int_str)-6)),0)+' Million and '+DecimalToEnglishExt(dec(mid(int_str,len(int_str)-5,6)))
           else*/
            result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-6),0)+' Million,'+DecimalToEnglishExt(mid(int_str,len(int_str)-5,6),0)
          end if
         case 1//美式格式
          if mid(int_str,len(int_str)-11,12)='000000000000' then//如果后面十二位全是0
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-12),0)+' Trillion'
          else
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-12),0)+' Trillion,'+DecimalToEnglishExt(mid(int_str,len(int_str)-11,12),1)
          end if
		   case 2//英式格式
          if mid(int_str,len(int_str)-11,12)='000000000000' then//如果后面十二位全是0
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-12),0)+' Billion'
          else
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-12),0)+' Billion,'+DecimalToEnglishExt(mid(int_str,len(int_str)-11,12),2)
          end if
	    end choose
      end if

      //*************分析十八位数以上的情况
      if len(int_str)>18 then
       choose case Cntype 
			case 0//普通格式
          if dec(mid(int_str,len(int_str)-5,6))=0 then//如果后面6位全是0
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-6),0)+' Million'
          else
           /*if pos('and',LowerCase(DecimalToEnglishExt(dec(mid(int_str,len(int_str)-5,6)),0)))=0 then
            result=DecimalToEnglishExt(dec(mid(int_str,1,len(int_str)-6)),0)+' Million and '+DecimalToEnglishExt(dec(mid(int_str,len(int_str)-5,6)))
           else*/
            result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-6),0)+' Million,'+DecimalToEnglishExt(mid(int_str,len(int_str)-5,6),0)
          end if
		   case 1//美式格式
          if mid(int_str,len(int_str)-11,12)='000000000000' then//如果后面十二位全是0
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-12),1)+' Trillion'
          else
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-12),1)+' Trillion,'+DecimalToEnglishExt(mid(int_str,len(int_str)-11,12),1)
          end if
 		   case 2//英式格式
          if mid(int_str,len(int_str)-17,18)='000000000000000000' then//如果后面十八位全是0
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-18),2)+' Trillion'
          else
           result=DecimalToEnglishExt(mid(int_str,1,len(int_str)-18),2)+' Trillion,'+DecimalToEnglishExt(mid(int_str,len(int_str)-17,18),2)
          end if
	    end choose
      end if
		
		//********************整数分析完毕
		
      //***********************分析小数******************
      if dec_str<>'' then
	      if result='zero' then 
				result='point'
	      else 
				result=result+' point'
			end if
	      for digit=1 to len(dec_str)
	       if mid(dec_str,digit,1)='0' then
	        result=result+' zero '
	       else
	        result=result+' '+n[dec(mid(dec_str,digit,1))]
	       end if
		   next
      end if
      result=Minus+result//成功
		return(result)
//转换结束

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -