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

📄 decimaltoenglishext.txt

📁 <数字转换汉字大写和英文读法的几个函数> 很早以前写的一个数字转换汉字大写和英文读法的几个函数,02年还修改过,可应用于delphi和Powerbuider,有兴趣的朋友可以改成其他
💻 TXT
字号:
{------------------数字转换为英文函数B---------------------------------------}
function DecimalToEnglishExt(num:string;cntype:integer):string;
{
  参数Num没有精度限制,可任意长度
  Cntype同DecimalToEnglish函数
}
var int_str,dec_str:string;//整数部分和小数部分
    n:array[0..90] of string;
    return:string;
    digit:integer;//小数点位置
    Minus:string;//数字正负性
    DecPos:integer;//数字长度,,
begin
      if (Cntype<>0) and (CnType<>1) and (CnType<>2) then begin
        showmessage('类型参数错误');
        result:='';
        exit;
      end;
      if trim(num)='' then begin
        showmessage('参数空');
        result:='';
        exit;
      end;
      return:='';//初始化结果字符
      //初始化关键字
      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 num[1]='-' then
      begin
        Num:=Copy(num,2,length(num)-1);
        Minus:='Minus ';
      end;
      //校验Num的数字格式是否有效
      //先校验是否只有一个小数点
      //校验参数number是不是数字格式
      Decpos:=0;
      for digit:=1 to Length(Num) do begin
       if Num[digit]='.' then Decpos:=Decpos+1;
      end;
      if Decpos>1 then begin
       showmessage('输入参数不是数字格式!');
       Result:='';
       exit;
      end;
      //校验是否含有非数字和'.'的字母存在
      for digit:=1 to Length(Num) do begin
       if Num[digit]='.' then continue;
       if  (ord(Num[digit])<48) or (ord(Num[digit])>57) then begin
        Result:='error';
        break;
       end;
      end;
      if Result='error' then begin
        showmessage('输入参数不是数字格式!');
        result:='';
        exit;
      end;
      digit:=pos('.',num);//得到小数点位置
      //分别得到整数部分和小数部分
      if pos('.',num)>0 then
      begin
            int_str:=copy(num,1,digit-1);
            dec_str:=copy(num,digit+1,Length(Num)-digit);
            //消除小数后面多余的0
            while copy(Dec_str,length(Dec_str),1)='0' do Dec_str:=copy(Dec_str,1,length(Dec_str)-1);
      end
      else
      begin
            int_str:=num;
            dec_str:='';
      end;
      //消除整数部分前面的多余的0
      while copy(int_str,1,1)='0' do int_str:=copy(int_str,2,length(int_str)-1);
      if int_str='' then int_str:='0';

//***********开始分析整数部分****************
      if length(int_str)<=3 then//分析只有一~三位数的情况
      begin
        if int_str='0' then//等于0
           return:='zero'
        else
        begin
         if strtoint(int_str)<=20 then
         begin//小于等于20
          return:=n[strtoint(int_str)];//直接读取名称
         end
         else
         begin
           if strtoint(int_str)<100 then//小于100
           begin
                 if int_str[2]='0' then//整十
                       return:=n[strtoint(int_str)]
                 else
                       return:=n[strtoint(int_str[1]+'0')]+' '+n[strtoint(int_str[2])];//组合几十几
           end;
         end;
         if strtoint(int_str)>=100 then//大于100
         begin
                if (int_str[2]='0') and (int_str[3]='0') then
                    return:=n[strtoint(int_str[1])]+' Hundred'
                else
                    return:=n[strtoint(int_str[1])]+' Hundred and '+DecimalToEnglishExt(int_str[2]+int_str[3],0);
         end;
        end;
      end;

      if (length(int_str)>=4) and (length(int_str)<=6) then//分析有四~六位数的情况
      begin
        if copy(int_str,length(int_str)-2,3)='000' then//后面全是0
         return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-3),0)+' Thousand'
        else
        begin
           if copy(int_str,length(int_str)-2,1)='0' then//百位为0,加and
            return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-3),0)+' Thousand and '+DecimalToEnglishExt(copy(int_str,length(int_str)-2,3),0)
           else
           begin
            if copy(int_str,length(int_str)-1,2)='00' then//是整百,加and
             return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-3),0)+' Thousand and '+DecimalToEnglishExt(copy(int_str,length(int_str)-2,3),0)
            else
             return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-3),0)+' Thousand '+DecimalToEnglishExt(copy(int_str,length(int_str)-2,3),0);
           end;
        end;
      end;

      if (length(int_str)>=7) and ((length(int_str)<=9)) then//分析七~九位数的情况
      begin
        if copy(int_str,length(int_str)-5,6)='000000' then//如果后面6位全是0
         return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-6),0)+' Million'
        else
        begin
          return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-6),0)+' Million,'+DecimalToEnglishExt(copy(int_str,length(int_str)-5,6),0);
        end;
      end;

      if (length(int_str)>=10) and ((length(int_str)<=12)) then//分析十~十二位数的情况
      begin
       case Cntype of
       0://普通格式
         begin
          if copy(int_str,length(int_str)-5,6)='000000' then//如果后面6位全是0
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-6),0)+' Million'
          else
          begin
            return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-6),0)+' Million,'+DecimalToEnglishExt(copy(int_str,length(int_str)-5,6),0);
          end;
         end;
       1://美式格式
         begin
          if copy(int_str,length(int_str)-8,9)='000000000' then//如果后面9位全是0
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-9),0)+' Billion'
          else
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-9),0)+' Billion,'+DecimalToEnglishExt(copy(int_str,length(int_str)-8,9),1);
         end;
       2://英式格式
         begin
          if copy(int_str,length(int_str)-8,9)='000000000' then//如果后面9位全是0
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-9),0)+' Milliard'
          else
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-9),0)+' Milliard,'+DecimalToEnglishExt(copy(int_str,length(int_str)-8,9),2);
         end;
       end;
      end;

      if (length(int_str)>=13) and ((length(int_str)<=18)) then//分析十三~十八位数的情况
      begin
       case Cntype of
       0://普通格式
         begin
          if copy(int_str,length(int_str)-5,6)='000000' then//如果后面6位全是0
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-6),0)+' Million'
          else
          begin
            return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-6),0)+' Million,'+DecimalToEnglishExt(copy(int_str,length(int_str)-5,6),0);
          end;
         end;
       1://美式格式
         begin
          if copy(int_str,length(int_str)-11,12)='000000000000' then//如果后面十二位全是0
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-12),0)+' Trillion'
          else
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-12),0)+' Trillion,'+DecimalToEnglishExt(copy(int_str,length(int_str)-11,12),1);
         end;
       2://英式格式
         begin
          if copy(int_str,length(int_str)-11,12)='000000000000' then//如果后面十二位全是0
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-12),0)+' Billion'
          else
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-12),0)+' Billion,'+DecimalToEnglishExt(copy(int_str,length(int_str)-11,12),2);
         end;
       end;
      end;

      if length(int_str)>18 then//分析十八位数以上的情况
      begin
       case Cntype of
       0://普通格式
         begin
          if copy(int_str,length(int_str)-5,6)='000000' then//如果后面6位全是0
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-6),0)+' Million'
          else
          begin
            return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-6),0)+' Million,'+DecimalToEnglishExt(copy(int_str,length(int_str)-5,6),0);
          end;
         end;
       1://美式格式
         begin
          if copy(int_str,length(int_str)-11,12)='000000000000' then//如果后面十二位全是0
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-12),1)+' Trillion'
          else
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-12),1)+' Trillion,'+DecimalToEnglishExt(copy(int_str,length(int_str)-11,12),1);
         end;
       2://英式格式
         begin
          if copy(int_str,length(int_str)-17,18)='000000000000000000' then//如果后面十八位全是0
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-18),2)+' Trillion'
          else
           return:=DecimalToEnglishExt(copy(int_str,1,length(int_str)-18),2)+' Trillion,'+DecimalToEnglishExt(copy(int_str,length(int_str)-17,18),2);
         end;
       end;
      end;
      //分析小数
      if dec_str<>'' then
      begin
        if return='zero' then return:='point' else return:=return+' point';
        for digit:=1 to length(dec_str) do
        begin
           if dec_str[digit]='0' then
             return:=return+' zero '
           else
             return:=return+' '+n[strtoint(dec_str[digit])];
        end;
      end;
      result:=Minus+return;//成功
end;//转换结束

⌨️ 快捷键说明

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