• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

DELPHI将金额转换成中文大写,与英文大写

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

转成中文大写

// 数字转大写金额

class function TFTFloatFunc.RMBFloatToChinese(ARMBCash: Real): string;

const

  cNum: WideString = '零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元角分';

  cCha: array [0 .. 1, 0 .. 11] of string =

    (('零仟', '零佰', '零拾', '零零零', '零零', '零亿', '零万', '零元', '亿万', '零角', '零分', '零整'),

    ('零', '零', '零', '零', '零', '亿', '万', '元', '亿', '零', '整', '整'));

var

  i: Integer;

  sNum: WideString;

begin

  Result := '';

  sNum := FormatFloat('0', ARMBCash * 100);

  for i := 1 to Length(sNum) do

    Result := Result + cNum[Ord(sNum[i]) - 47] + cNum[26 - Length(sNum) + i];

  for i := 0 to 11 do // 去掉多余的零

    Result := StringReplace(Result, cCha[0, i], cCha[1, i], [rfReplaceAll]);

 

end;

 

转成 英文大写

class function TFTFloatFunc.RMBFloatToEnglish(ARMBCash: Real ; intRMB: Boolean): string;

  function  Left(const AStr: string; ACount: Integer): string;

  begin

    Result := Copy(astr,1,ACount);

  end;

 

  function Right(const AStr: string; ACount: Integer): string;

  begin

    Result := Copy(astr,Length(AStr)-acount+1, ACount);

  end;

 

  //将在1-19之间的数字转换成英文表示法

  function DigitToEn1(strDigits: String): String;

  begin

    Case StrToInt(strDigits) of

      1: Result := 'ONE';

      2: Result := 'TWO';

      3: Result := 'THREE';

      4: Result := 'FOUR';

      5: Result := 'FIVE';

      6: Result := 'SIX';

      7: Result := 'SEVEN';

      8: Result := 'EIGHT';

      9: Result := 'NINE';

      10: Result := 'TEN';

      11: Result := 'ELEVEN';

      12: Result := 'TWELVE';

      13: Result := 'THIRTEEN';

      14: Result := 'FOURTEEN';

      15: Result := 'FifTEEN';

      16: Result := 'SIXTEEN';

      17: Result := 'SEVENTEEN';

      18: Result := 'EIGHTEEN';

      19: Result := 'NINETEEN';

    else

      Result := '';

    end;

  end;

 

 

  //将在1-99之间的数字转换成英文表示法

  function DigitToEn2(strDigits: String): String;

  var

    strTemp: String;

  begin

    if StrToInt(strDigits) < 20 then

      Result := DigitToEn1(strDigits)

    else begin

      Case StrToInt(Left(strDigits, 1)) of

        2: strTemp := 'TWENTY';

        3: strTemp := 'THIRTY';

        4: strTemp := 'FORTY';

        5: strTemp := 'FIFTY';

        6: strTemp := 'SIXTY';

        7: strTemp := 'SEVENTY';

        8: strTemp := 'EIGHTY';

        9: strTemp := 'NINETY';

      else

        strTemp := '';

      end;

 

      if Right(strDigits, 1) <> '0' then

          strTemp := strTemp + '-' + DigitToEn1(Right(strDigits, 1));

 

      Result := strTemp;

    end;

  end;

  //将在1-999之间的数字转换成英文表示法

  //如intFormat为1,则在HUNDRED 后面就有 AND,否则没有。

  function DigitToEn3(strDigits: String; intFormat: Integer): String;

  begin

    //去掉数字串前面的0

    strDigits := IntToStr(StrToInt(strDigits));

 

    if StrToFloat(strDigits) <= 19 then

      Result := DigitToEn1(strDigits)

    else if (StrToFloat(strDigits) >= 20) and (StrToFloat(strDigits) <= 99) then

      Result := DigitToEn2(strDigits)

    else begin

      Result := DigitToEn1(Left(strDigits, 1)) + ' HUNDRED AND';

      if (StrToFloat(Right(strDigits, 2)) > 0) and

        (StrToFloat(Right(strDigits, 2)) < 20) then

        if intFormat = 1 then

          Result := Result + ' '+DigitToEn1(Right(strDigits, 2)) //' AND ' +

        else

          Result := Result + ' ' + DigitToEn1(Right(strDigits, 2))

      else if (StrToFloat(Right(strDigits, 2)) >= 20)

        and (StrToFloat(Right(strDigits, 2)) <= 99) then

        if intFormat = 1 then

          Result := Result + ' ' + DigitToEn2(Right(strDigits, 2)) //AND

        else

          Result := Result + ' ' + DigitToEn2(Right(strDigits, 2));

    end;

  end;

 

var

  // 整数部份 小数部份

  strInteger, strDecimal: String;

  strTemp: String;

  strDigits :string;

begin

  //只能到千亿,万亿其实是没有意义的

  if (ARMBCash > 999999999999.99)  or ( ARMBCash< 0.01) then

    raise exception.Create('Out of range, must between 0.01 - 999999999999.99');

  strDigits:= FloatToStr(ARMBCash);

  //有整数部分及小数部分

  if (Int(ARMBCash) > 0) and (ARMBCash - Int(ARMBCash) > 0) then

  begin

    strInteger := Left(strDigits, Pos('.', strDigits) - 1);

    strDecimal := Right(strDigits, Length(strDigits) - Pos('.', strDigits));

  end

  //只有整数部分

  else if Int(ARMBCash) > 0 then

    strInteger := IntToStr(System.Round(ARMBCash))

  //只有小数部分

  else if ARMBCash - Int(ARMBCash) > 0 then

    strDecimal := Right(strDigits, Length(strDigits) - Pos('.', strDigits));

  //得到整数部分英文表示法

  if strInteger <> '' then begin

    strTemp := DigitToEn3(Right(strInteger, 3), 1);

    if Length(strInteger) > 3 then begin

      strTemp := DigitToEn3(Left(Right(strInteger, 6),

        Length(Right(strInteger, 6)) - 3), 2) + ' THOUSAND AND ' + strTemp;

      //百万以上

      if Length(strInteger) > 6 then

        strTemp := DigitToEn3(Left(strInteger, Length(strInteger) - 6), 2) +

        ' MILLION AND ' + strTemp;

        //十亿以上

      if Length(strInteger) > 9 then

        strTemp := DigitToEn3(Left(strInteger, Length(strInteger) - 9), 2) +

        ' BILLION AND ' + strTemp;

    end;

    strInteger := strTemp;

  end;

  if (strDecimal <> '') and (Length(strDecimal) <= 3) then

    strDecimal := DigitToEn3(strDecimal, 1);

 

  if (strInteger <> '') and (strDecimal <> '') then

    if intRMB then

      Result := strInteger + ' YUANS AND ' + strDecimal + ' CENTS ONLY'

    else

      Result := strInteger + ' DOLLARS AND ' + strDecimal + ' CENTS ONLY'

  else if strInteger <> '' then

    if intRMB then

      Result := strInteger + ' YUANS ONLY'

    else

      Result := strInteger + ' DOLLARS ONLY'

  else if strDecimal <> '' then

    Result := strDecimal + ' CENTS ONLY'

  else

    Result := 'ZERO';

end;


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap