用delphi写人民币大写转小写的函数

今天找到一个思路,用分段的方法实现了人民币大写转小写的功能,最大到千亿。细节待完善

function GetSegmentValue(RMB: string; const segmentChar: Char): Int64;
var
  I: Integer;
  allsum: Int64;
  CurrChar: Char;
  Temp: Int64;
  Digits: string;
begin
  Digits := '零壹贰叁肆伍陆柒捌玖';
  allsum := 0;
  Temp := 0;
  for I := 1 to Pos(segmentChar, RMB) do
  begin
    CurrChar := RMB[I];
    if Pos(CurrChar, Digits) > 0 then
    begin
      Temp := Pos(CurrChar, Digits) - 1;
    end;

    if Pos(CurrChar, '仟佰拾' + segmentChar) > 0 then
    begin
      if CurrChar = '仟' then
        Temp := Temp * 1000
      else if CurrChar = '佰' then
        Temp := Temp * 100
      else if CurrChar = '拾' then
        Temp := Temp * 10
      else if CurrChar = segmentChar then
        Temp := Temp * 1;

      allsum := allsum + Temp;
      Temp := 0;
    end;

  end;
  Result := allsum;

end;

function ConvertRMB(var RMB: string): Double;
var
  YiPos: Integer;
  Digits: string;
begin
  Result := 0;

  YiPos := Pos('亿', RMB);
  // 处理“亿”前面的部分
  if YiPos > 0 then
  begin
    Result := Result + GetSegmentValue(RMB, '亿') * 100000000;
    Delete(RMB, 1, YiPos);
  end;

  // 处理“万”前面的部分
  YiPos := Pos('万', RMB); // 重新定位
  if YiPos > 0 then
  begin
    Result := Result + GetSegmentValue(RMB, '万') * 10000;
    Delete(RMB, 1, YiPos);
  end;

  // 处理“元”前面的部分
  YiPos := Pos('元', RMB); // 重新定位
  if YiPos > 0 then
  begin
    Result := Result + GetSegmentValue(RMB, '元');
    Delete(RMB, 1, YiPos);
  end;

  YiPos := Pos('角', RMB); // 重新定位
  if YiPos > 0 then
  begin
    Result := Result + GetSegmentValue(RMB, '角') * 0.1;
    Delete(RMB, 1, YiPos);
  end;

  YiPos := Pos('分', RMB); // 重新定位
  if YiPos > 0 then
    Result := Result + GetSegmentValue(RMB, '分') * 0.01;

end;

你可能感兴趣的:(delphi,人民币,大写,小写,转换)