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

📄 xchinese.pas

📁 我自己用的Delphi函数单元 具体说明见打包文件的HELP目录下面
💻 PAS
字号:
unit xChinese;

interface

uses Sysutils;

//------------------------------------------------------------------//
function ToRMB(v:Currency):String; 
function GetHzPy(const AHzStr: string): string;

implementation

//------------------------------------------------------------------//
//将货币值转换为人民币大写
function ToRMB(v:Currency):String; //精度在1万亿之内。
var
	IsNegative,IsZero:Boolean;
	i,k,n:Integer;
	s,ChineseNumber,ChineseMoney,ChineseBit,ChineseStr:String;
	a,c:char;
begin
	if v < 0 then
	begin
	  v := -1 *v;
	  IsNegative:=True;
	end
	else
	  IsNegative:=False;
	s:= Trim(IntToStr(round(v*100)));
	n:= length(s);
	ChineseNumber:= '零壹贰叁肆伍陆柒捌玖';
	ChineseMoney := '万仟佰拾亿仟佰拾万仟佰拾元角分';
	ChineseBit := '000010001000100';
	ChineseMoney := Copy(ChineseMoney,length(ChineseMoney)-2*n+1,n*2);
	ChineseBit := Copy(ChineseBit,length(ChineseBit)-n+1,n);
	ChineseStr := '';
	IsZero := False;
	for i:= 1 to n do
	begin
	  c:= s[i];
	  if c='0' then
	  	begin
	       a := ChineseBit[i];
	       if a = '1' then
	          ChineseStr := ChineseStr+Copy(ChineseMoney,2*i-1,2);
	       IsZero :=True;
	    end
	  else
	  begin
	       if IsZero then
	          ChineseStr := ChineseStr+Copy(ChineseNumber,1,2);
	        ChineseStr := ChineseStr+Copy(ChineseNumber,(ord(c)-48)*2+1,2);
	        ChineseStr := ChineseStr+Copy(ChineseMoney,i*2-1,2);
	        IsZero := False;
	  end;
	end; //for
	if s[n] = '0' then
	  ChineseStr := ChineseStr+'整';
	n:= pos('亿万',ChineseStr);
    k:=length(ChineseStr);
	if n <> 0 then
	  ChineseStr := Copy(ChineseStr,1,n+1)+Copy(ChineseStr,n+4,k-n-3);
	if IsNegative then
		ChineseStr := '负' + ChineseStr;
	ToRMB:= ChineseStr;
end;

//------------------------------------------------------------------//
//取的汉字的拼音的首字母
function GetHzPy(const AHzStr: string): string;
const
  ChinaCode: array[0..25, 0..1] of Integer = ((1601, 1636), (1637, 1832), (1833, 2077),
    (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000),
    (2787, 3105), (3106, 3211), (3212, 3471), (3472, 3634), (3635, 3722), (3723, 3729),
    (3730, 3857), (3858, 4026), (4027, 4085), (4086, 4389), (4390, 4557), (9999, 0000),
    (9999, 0000), (4558, 4683), (4684, 4924), (4925, 5248), (5249, 5589));
var
  i, j, HzOrd: integer;
begin
  i := 1;
  while i <= Length(AHzStr) do
  begin
    if (AHzStr[i] >= #160) and (AHzStr[i + 1] >= #160) then
    begin
      HzOrd := (Ord(AHzStr[i]) - 160) * 100 + Ord(AHzStr[i + 1]) - 160;
      for j := 0 to 25 do
      begin
        if (HzOrd >= ChinaCode[j][0]) and (HzOrd <= ChinaCode[j][1]) then
        begin
          Result := Result + char(byte('A') + j);
          break;
        end;
      end;
      Inc(i);
    end else Result := Result + AHzStr[i];
    Inc(i);
  end;
end;

end.

⌨️ 快捷键说明

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