给你一个完整的文档 使用时只要 label1.caption:=getRMB(23.0)就可以了unit theRMB;interface uses classes, SysUtils, Dialogs;//金额转换为人民币大写 function GetRMB(je: Real): string; function ChinaNumber(Num: Integer): string; function GetRMBIndex(T: string): Integer;implementationfunction GetRMBIndex(T: string): Integer; var UpperRMB: TStringList; i: Integer; begin Result := -1; UpperRMB := TStringList.Create; try UpperRMB.Add('元'); UpperRMB.Add('拾'); UpperRMB.Add('佰'); UpperRMB.Add('千'); UpperRMB.Add('万'); UpperRMB.Add('拾'); UpperRMB.Add('佰'); UpperRMB.Add('千'); UpperRMB.Add('亿'); UpperRMB.Add('拾'); UpperRMB.Add('佰'); UpperRMB.Add('千'); UpperRMB.Add('万'); for i := 0 to UpperRMB.count - 1 do if T = UpperRMB.Strings[i] then begin Result := I; Break; end; finally UpperRMB.free; end; end;function GetRMB(je: Real): string; var TempStr, TempRMB: string; Temp: string; TempPrio, TempNext: Integer; cur_pos: Integer; i: Integer; UpperRMB: TStringList; begin try UpperRMB := TStringList.Create; // UpperRMB.Add(''); UpperRMB.Add('元'); UpperRMB.Add('拾'); UpperRMB.Add('佰'); UpperRMB.Add('仟'); UpperRMB.Add('万'); UpperRMB.Add('拾'); UpperRMB.Add('佰'); UpperRMB.Add('千'); UpperRMB.Add('亿'); UpperRMB.Add('拾'); UpperRMB.Add('佰'); UpperRMB.Add('千'); UpperRMB.Add('万'); if je = 0 then begin Result := ''; Exit; end; i := 0; TempStr := FloatToStr(je); cur_pos := pos('.', TempStr); if cur_pos > 0 then begin TempRMB := copy(TempStr, cur_pos + 1, 1); if TempRMB = '0' then Temp := '零' else Temp := ChinaNumber(StrToInt(TempRMB)) + '角'; TempRMB := copy(TempStr, cur_pos + 2, 1); if TempRMB <> '' then Temp := Temp + ChinaNumber(StrToInt(TempRMB)) + '分'; TempStr := copy(TempStr, 1, cur_pos - 1); end; for i := 1 to length(TempStr) do begin TempRMB := copy(TempStr, Length(TempStr), 1); if TempRMB = '0' then begin if ((i - 1) mod 4) = 0 then begin if copy(Result, 1, 2) <> '零' then Result := '零' + UpperRMB.Strings[I - 1] + Result else Result := UpperRMB.Strings[I - 1] + Result; end else begin if copy(Result, 1, 2) <> '零' then Result := '零' + Result; end; end else Result := ChinaNumber(StrToInt(TempRMB)) + UpperRMB.Strings[I - 1] + Result; TempStr := copy(TempStr, 1, Length(TempStr) - 1); end; cur_pos := pos('零', Result); TempStr := ''; while cur_pos > 0 do begin if TempStr = Result then Break; TempStr := Result; TempPrio := GetRMBIndex(copy(Result, cur_pos - 2, 2)); TempNext := GetRMBIndex(copy(Result, cur_pos + 2, 2)); if (TempPrio < TempNext) then delete(Result, cur_pos, 2) else begin if (copy(Result, cur_pos - 2, 2) = '亿') and (copy(Result, cur_pos + 2, 2) = '万') then delete(Result, cur_pos, 4); if copy(Result, cur_pos + 2, 2) = '' then delete(Result, cur_pos, 2); end; cur_pos := pos('零', Result); end; if copy(Result, length(result) - 3, 2) = '零' then delete(result, length(result) - 3, 2); Result := Result + Temp; finally UpperRMB.Free; end; end;function ChinaNumber(Num: Integer): string; begin case Num of 1: Result := '壹'; 2: Result := '贰'; 3: Result := '叁'; 4: Result := '肆'; 5: Result := '伍'; 6: Result := '陆'; 7: Result := '柒'; 8: Result := '捌'; 9: Result := '玖'; 0: Result := '零'; else MessageDlg('数字输入错误!', mtError, [mbOK], 0); end; end;end.
我也写过,但这个函数好像有点问题,更完善代码更短的在家里. {金额转换成人民币大写字符串} Function NumberToRMB(Je:Real):String; Const JeStrList = ' 分 角 元 拾 佰 千 万拾万佰万仟万 亿拾亿佰亿千亿'; NumStrList = '零壹贰叁肆伍陆染捌玖'; Var I : Integer; TempStr,RmbStr : String; Zero,IsY,IsM : Boolean; Begin TempStr := FloatToStr(Round(Je*100)); RmbStr := ''; For I:=0 To Length(TempStr)-1 Do RmbStr:=RmbStr+Copy(NumStrList,StrToInt(Copy(TempStr,I+1,1))*2+1,2)+Trim(Copy(JeStrList,(Length(TempStr)-I-1)*4+1,4)); I := Length(RmbStr)-1; Zero := False; IsM := False; IsY := False; While I>0 Do Begin TempStr := Copy(RmbStr,I,2); IF TempStr ='零' Then Begin IF Copy(RmbStr,I+2,2)='元' Then Delete(RmbStr,I,2){零元 去掉零} Else IF Zero Then Delete(RmbStr,I,4) {第二次出现零时去掉四个字符} Else Delete(RmbStr,I+2,2);{第一次出现去掉零后面的两个字符} I:=I-2; Zero := True; Continue; End; I:=I-2; IF Pos(TempStr,NumStrList)<>0 Then Zero := False; End; IF mlRight(RmbStr,2)='零' Then RmbStr := Copy(RmbStr,1,Length(RmbStr)-2); IF mlRight(RmbStr,2)<>'分' Then RmbStr := RmbStr + '整'; I:=Length(RmbStr)-1; While I>0 Do Begin //将多余的万与亿去掉; 10025000.01 TempStr := Copy(RmbStr,I,2); IF TempStr='亿' Then IF IsY Then Begin Delete(RmbStr,I,2); End Else IsY:=True; //去掉多余的亿 IF TempStr='万' Then IF IsM Then Begin Delete(RmbStr,I,2); End Else IsM:=True; //去掉多余的万 I:=I-2; End; Result := RmbStr; End;
使用时只要 label1.caption:=getRMB(23.0)就可以了unit theRMB;interface
uses classes, SysUtils, Dialogs;//金额转换为人民币大写
function GetRMB(je: Real): string;
function ChinaNumber(Num: Integer): string;
function GetRMBIndex(T: string): Integer;implementationfunction GetRMBIndex(T: string): Integer;
var
UpperRMB: TStringList;
i: Integer;
begin
Result := -1;
UpperRMB := TStringList.Create;
try
UpperRMB.Add('元');
UpperRMB.Add('拾');
UpperRMB.Add('佰');
UpperRMB.Add('千');
UpperRMB.Add('万');
UpperRMB.Add('拾');
UpperRMB.Add('佰');
UpperRMB.Add('千');
UpperRMB.Add('亿');
UpperRMB.Add('拾');
UpperRMB.Add('佰');
UpperRMB.Add('千');
UpperRMB.Add('万');
for i := 0 to UpperRMB.count - 1 do
if T = UpperRMB.Strings[i] then begin
Result := I;
Break;
end;
finally
UpperRMB.free;
end;
end;function GetRMB(je: Real): string;
var
TempStr, TempRMB: string;
Temp: string;
TempPrio, TempNext: Integer;
cur_pos: Integer;
i: Integer;
UpperRMB: TStringList;
begin
try
UpperRMB := TStringList.Create;
// UpperRMB.Add('');
UpperRMB.Add('元');
UpperRMB.Add('拾');
UpperRMB.Add('佰');
UpperRMB.Add('仟');
UpperRMB.Add('万');
UpperRMB.Add('拾');
UpperRMB.Add('佰');
UpperRMB.Add('千');
UpperRMB.Add('亿');
UpperRMB.Add('拾');
UpperRMB.Add('佰');
UpperRMB.Add('千');
UpperRMB.Add('万');
if je = 0 then begin
Result := '';
Exit;
end;
i := 0;
TempStr := FloatToStr(je);
cur_pos := pos('.', TempStr);
if cur_pos > 0 then begin
TempRMB := copy(TempStr, cur_pos + 1, 1);
if TempRMB = '0' then
Temp := '零'
else
Temp := ChinaNumber(StrToInt(TempRMB)) + '角';
TempRMB := copy(TempStr, cur_pos + 2, 1);
if TempRMB <> '' then
Temp := Temp + ChinaNumber(StrToInt(TempRMB)) + '分';
TempStr := copy(TempStr, 1, cur_pos - 1);
end;
for i := 1 to length(TempStr) do begin
TempRMB := copy(TempStr, Length(TempStr), 1);
if TempRMB = '0' then begin
if ((i - 1) mod 4) = 0 then begin
if copy(Result, 1, 2) <> '零' then
Result := '零' + UpperRMB.Strings[I - 1] + Result
else
Result := UpperRMB.Strings[I - 1] + Result;
end
else begin
if copy(Result, 1, 2) <> '零' then
Result := '零' + Result;
end;
end
else
Result := ChinaNumber(StrToInt(TempRMB)) + UpperRMB.Strings[I - 1] + Result;
TempStr := copy(TempStr, 1, Length(TempStr) - 1);
end;
cur_pos := pos('零', Result);
TempStr := '';
while cur_pos > 0 do begin
if TempStr = Result then Break;
TempStr := Result;
TempPrio := GetRMBIndex(copy(Result, cur_pos - 2, 2));
TempNext := GetRMBIndex(copy(Result, cur_pos + 2, 2));
if (TempPrio < TempNext) then delete(Result, cur_pos, 2)
else begin
if (copy(Result, cur_pos - 2, 2) = '亿') and (copy(Result, cur_pos + 2, 2) = '万') then
delete(Result, cur_pos, 4);
if copy(Result, cur_pos + 2, 2) = '' then delete(Result, cur_pos, 2);
end;
cur_pos := pos('零', Result);
end;
if copy(Result, length(result) - 3, 2) = '零' then
delete(result, length(result) - 3, 2);
Result := Result + Temp;
finally
UpperRMB.Free;
end;
end;function ChinaNumber(Num: Integer): string;
begin
case Num of
1: Result := '壹';
2: Result := '贰';
3: Result := '叁';
4: Result := '肆';
5: Result := '伍';
6: Result := '陆';
7: Result := '柒';
8: Result := '捌';
9: Result := '玖';
0: Result := '零';
else
MessageDlg('数字输入错误!', mtError, [mbOK], 0);
end;
end;end.
{金额转换成人民币大写字符串}
Function NumberToRMB(Je:Real):String;
Const
JeStrList = ' 分 角 元 拾 佰 千 万拾万佰万仟万 亿拾亿佰亿千亿';
NumStrList = '零壹贰叁肆伍陆染捌玖';
Var
I : Integer;
TempStr,RmbStr : String;
Zero,IsY,IsM : Boolean;
Begin
TempStr := FloatToStr(Round(Je*100));
RmbStr := '';
For I:=0 To Length(TempStr)-1 Do
RmbStr:=RmbStr+Copy(NumStrList,StrToInt(Copy(TempStr,I+1,1))*2+1,2)+Trim(Copy(JeStrList,(Length(TempStr)-I-1)*4+1,4));
I := Length(RmbStr)-1;
Zero := False;
IsM := False;
IsY := False;
While I>0 Do Begin
TempStr := Copy(RmbStr,I,2);
IF TempStr ='零' Then Begin
IF Copy(RmbStr,I+2,2)='元' Then Delete(RmbStr,I,2){零元 去掉零}
Else IF Zero Then Delete(RmbStr,I,4) {第二次出现零时去掉四个字符}
Else Delete(RmbStr,I+2,2);{第一次出现去掉零后面的两个字符}
I:=I-2;
Zero := True;
Continue;
End;
I:=I-2;
IF Pos(TempStr,NumStrList)<>0 Then Zero := False;
End;
IF mlRight(RmbStr,2)='零' Then RmbStr := Copy(RmbStr,1,Length(RmbStr)-2);
IF mlRight(RmbStr,2)<>'分' Then RmbStr := RmbStr + '整';
I:=Length(RmbStr)-1;
While I>0 Do Begin //将多余的万与亿去掉; 10025000.01
TempStr := Copy(RmbStr,I,2);
IF TempStr='亿' Then IF IsY Then Begin Delete(RmbStr,I,2); End Else IsY:=True; //去掉多余的亿
IF TempStr='万' Then IF IsM Then Begin Delete(RmbStr,I,2); End Else IsM:=True; //去掉多余的万
I:=I-2;
End;
Result := RmbStr;
End;
-》 下载基地-》例程-经典应用-》金额小写转大写
www.lvyin.net 2002-7-30 绿荫网络 如下为一个简单的小写金额转换为大写的函数,其思路简单(可以说烂吧,居然利用了位置来转换),但是它几乎可以无限制的转换,只要你能读得出来和写得进去:function Tform1.SmallTOBig(small:real):string;
var SmallMonth,BigMonth:string;
wei1,qianwei1:string[2];
qianwei,dianweizhi,qian:integer;
begin
{------- 修改参数令值更精确 -------}
{小数点后的位置,需要的话也可以改动-2值}
qianwei:=-2;
{转换成货币形式,需要的话小数点后加多几个零}
Smallmonth:=formatfloat('0.00',small);
{---------------------------------}
dianweizhi :=pos('.',Smallmonth);{小数点的位置}
{循环小写货币的每一位,从小写的右边位置到左边}
for qian:=length(Smallmonth) downto 1 do
begin
{如果读到的不是小数点就继续}
if qian<>dianweizhi then
begin
{位置上的数转换成大写}
case strtoint(copy(Smallmonth,qian,1)) of
1:wei1:='壹'; 2:wei1:='贰';
3:wei1:='叁'; 4:wei1:='肆';
5:wei1:='伍'; 6:wei1:='陆';
7:wei1:='柒'; 8:wei1:='捌';
9:wei1:='玖'; 0:wei1:='零';
end;
{判断大写位置,可以继续增大到real类型的最大值}
case qianwei of
-3:qianwei1:='厘';
-2:qianwei1:='分';
-1:qianwei1:='角';
0 :qianwei1:='元';
1 :qianwei1:='拾';
2 :qianwei1:='佰';
3 :qianwei1:='千';
4 :qianwei1:='万';
5 :qianwei1:='拾';
6 :qianwei1:='佰';
7 :qianwei1:='千';
8 :qianwei1:='亿';
9 :qianwei1:='十';
10:qianwei1:='佰';
11:qianwei1:='千';
end;
inc(qianwei);
BigMonth :=wei1+qianwei1+BigMonth;{组合成大写金额}
end;
end;
SmallTOBig:=BigMonth;
end;调用如下edit1.text:=SmallTOBig(1234567890.1234);他自动默认小数点后两位