function NumToChar(const n: Real): string; //可以到万亿,并且可以随便扩大范围 const cnum: array[0..9] of string = (’零’,’壹’,’贰’,’叁’,’肆’,’伍’,’陆’,’柒’,’捌’,’玖’); cunit: array[0..14] of string = (’万’,’仟’,’佰’,’拾’,’亿’,’仟’,’佰’,’拾’,’万’,’仟’,’佰’,’拾’,’元’,’角’,’分’); var i : Integer; snum,stemp : string; begin result := ’’; snum := format(’%15d’,[round(n * 100)]); for i := 0 to 14 do begin stemp := copy(snum,i+1,1); if stemp=’ ’ then continue else result := result + cnum[strtoint(stemp)] + cunit[i]; end; //去掉多余的零 Result := StringReplace(Result, ’零元’, ’元’, [rfReplaceAll]); Result := StringReplace(Result, ’零拾’, ’零’, [rfReplaceAll]); Result := StringReplace(Result, ’零佰’, ’零’, [rfReplaceAll]); Result := StringReplace(Result, ’零仟’, ’零’, [rfReplaceAll]); Result := StringReplace(Result, ’零万’, ’万’, [rfReplaceAll]); Result := StringReplace(Result, ’零亿’, ’亿’, [rfReplaceAll]); Result := StringReplace(Result, ’亿万’, ’亿’, [rfReplaceAll]); Result := StringReplace(Result, ’零零零’, ’零’, [rfReplaceAll]); Result := StringReplace(Result, ’零零’, ’零’, [rfReplaceAll]); Result := StringReplace(Result, ’零万’, ’万’, [rfReplaceAll]); Result := StringReplace(Result, ’零亿’, ’亿’, [rfReplaceAll]); Result := StringReplace(Result, ’亿万’, ’亿’, [rfReplaceAll]); Result := StringReplace(Result, ’零元’, ’元’, [rfReplaceAll]); if pos(’零分’,result)=0 then Result := StringReplace(Result, ’零角’, ’零’, [rfReplaceAll]) else Result := StringReplace(Result, ’零角’, ’整’, [rfReplaceAll]); Result := StringReplace(Result, ’零分’, ’’, [rfReplaceAll]); end;
给个人民币转换程序给你,慢慢看,肯定可以的 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end;var Form1: TForm1; procedure StrCopyEx(Des:Pchar;Src:ShortString;StartPos:integer;Len:integer); function GetFirstNoZeroLen(s:ShortString;StartPos:integer):integer; function FloatToPStr(F:Double;Num:Integer):ShortString; function ConvertRMB(RMB:double):ShortString; implementation{$R *.dfm} procedure StrCopyEx(Des:Pchar;Src:ShortString;StartPos:integer;Len:integer); var i:integer; begin for i:=0 to Len-1 do begin Des[i]:=Src[StartPos+i+1]; end; Des[Len]:=#0; end; {************************************************************************** 获取指定位置到第一个非零字符的长度 输入: s---所在字符串 StartPos---开始的位置 返回:从s[i]到第一个不是'0'的长度 说明:由DecStrToPst调用 **************************************************************************} function GetFirstNoZeroLen(s:ShortString;StartPos:integer):integer; var i,L:integer; begin L:=strlen(Pchar(String(s))); Result:=0; for i:=StartPos to L do begin if s[i]<>'0' then begin Result:=i-StartPos; exit;end; end; end; //------------------------------------------------------------------------------ function DecStrToPStr(DecString:ShortString):ShortString; const HZStr:array[0..10] of String[2]=(('零'),('壹'),('贰'),('叁'),('肆'),('伍'),('陆'), ('柒'),('捌'),('玖'),('拾')); sUnitB:Array[1..14] Of String[4]=((''),('拾'),('佰'),('仟'),('万'),('十万'),('百万'), ('千万'),('亿'),('十亿'),('百亿'),('千亿'),('兆'), ('十兆') ); sUnit:Array[1..4] Of String[2]=((''),('万'),('亿'),('兆')); sUnitEx:Array[1..14] Of String[4]=((''),(''),(''),(''),('万'),('十'),('百'), ('千'),('亿'),('十'),('百'),('千'),('兆'), ('十') ); sUnitEx1:Array[1..14] Of String[4]=((''),(''),(''),(''),('万'),('万'),('万'), ('万'),('亿'),('亿'),('亿'),('亿'),('兆'), ('兆') ); var tempStr,TmpDecStr:ShortString; tempstr1:array[0..4] of char; L,i:integer; TAMA:boolean; sPartSum,sFirstPartNum:integer; begin if DecString='' then exit; TmpDecStr:=IntToStr(StrToInt64(DecString)); L:=strlen(Pchar(String(TmpDecStr))); tempStr:=''; TAMA:=TRUE; if L <= 4 then begin for i:=1 to L do if TmpDecStr[i]<>'0' then begin if (L-i+1)<5 then tempstr:=tempstr+HZStr[ord(TmpDecStr[i])-48]+sUnitB[L-i+1] else tempstr:=tempstr+HZStr[ord(TmpDecStr[i])-48]+sUnitEx[L-i+1]; TAMA:=true; end else begin if ((L-i+1>1) and TAMA and (GetFirstNoZeroLen(TmpDecStr,i)>0)) then begin tempstr:=tempstr+sUnitEx1[L-i+1]+HZStr[ord(TmpDecStr[i])-48]; TAMA:=false; end;//END IF end;//END ELSE if ((DecString[1]='0') and (GetFirstNoZeroLen(DecString,1)<>0)) then Result:='零'+tempStr else Result:=tempStr; exit; end; if L mod 4<>0 then sPartSum:=(L Div 4)+1 else sPartSum:=(L Div 4); sFirstPartNum:=L Mod 4; if sFirstPartNum=0 then sFirstPartNum:=4; for i:=0 to sPartSum-1 do begin if i>0 then StrCopyEx(tempStr1,Pchar(String(TmpDecStr)),4*(i-1)+sFirstPartNum,4) else strcopyEx(tempStr1,Pchar(string(TmpDecStr)),0,sFirstPartNum); tempstr:=TempStr+DecStrToPStr(tempstr1)+sUnit[sPartSum-i]; end; Result:=tempStr; end; //------------------------------------------------------------------------------ function FloatToPStr(F:Double;Num:Integer):ShortString; CONST HZStr:array[0..10] of String[2]=(('零'),('壹'),('贰'),('叁'),('肆'),('伍'),('陆'), ('柒'),('捌'),('玖'),('拾')); sExtendUnit:Array[1..2] of String[2]=(('角'),('分')); var sTemp,sExtendPart:ShortString; iStrLen,iDotPosition:integer; i:integer; DecPartIsNull:Boolean; begin sTemp:=FloatToStr(F); iStrLen:=strlen(Pchar(String(sTemp))); iDotPosition:=Pos('.',sTemp); if iDotPosition>0 then //分离小数点前后数,并对正数部分转换 begin sExtendPart:=strpos(pchar(String(sTemp)),'.')+1; sExtendPart[Num+1]:=#0; Delete(sTemp,iDotPosition,iStrLen-iDotPosition+1); end; DecPartIsNull:=False; if sTemp<>'' then begin sTemp:=DecStrToPStr(sTemp); if sTemp<>'' then begin if iDotPosition>0 then sTemp:=sTemp+'元' else sTemp:=sTemp+'元整'; end else DecPartIsNull:=True; end else DecPartIsNull:=True; if iDotPosition>0 then //处理小数部分的转换 begin for i:=1 to StrLen(Pchar(String(sExtendPart))) do begin if sExtendPart[i]<>'0' then sTemp:=sTemp+HZStr[ord(sExtendPart[i])-48]+sExtendUnit[i] else if not DecPartIsNull then sTemp:=sTemp+HZStr[ord(sExtendPart[i])-48] end; end; Result:=sTemp; end; //------------------------------------------------------------------------------ function ConvertRMB(RMB:double):ShortString; begin result := ''; if RMB = 0 then begin result := '零元整';exit;end; //为零处理 if RMB>99999999999999 then begin //最大值处理 result:='';exit; end; if RMB<0 then begin Result:='负';RMB:= RMB * -1; end; //负数处理 Result:=Result+FloatToPStr(RMB,2); //Abs :绝对值函数 end;procedure TForm1.Button1Click(Sender: TObject); begin if Edit1.Text='' then begin application.MessageBox('不能为空值','提示',64); exit; end else showmessage(ConvertRMB(strtofloat(edit1.Text))); end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (key in ['0'..'9',#8,'.']) then key:=#0; end;end.
http://dev.csdn.net/article/28/28433.shtm
var
str, str_Upper:string;
i,j:integer;
begin
str_Upper := '';
str := Edit1.Text;
for j := 1 to Length(Edit1.Text) do
begin
i := StrToInt(LeftStr(str,1));
case i of
0: str_Upper := str_Upper + '零';
1: str_Upper := str_Upper + '壹';
2: str_Upper := str_Upper + '贰';
3: str_Upper := str_Upper + '叁';
4: str_Upper := str_Upper + '肆';
5: str_Upper := str_Upper + '伍';
6: str_Upper := str_Upper + '陆';
7: str_Upper := str_Upper + '柒';
8: str_Upper := str_Upper + '捌';
9: str_Upper := str_Upper + '玖';
end;
Delete(str,1,1)
end;
Edit2.Text := str_Upper;
end;
错误提示:
Undeclared identifier:'Leftstr'
这里面你稍微改改就可以了。。比转换金额的要简单
错误提示:
Undeclared identifier:'Leftstr'Users strUtils
const cnum: array[0..9] of string = (’零’,’壹’,’贰’,’叁’,’肆’,’伍’,’陆’,’柒’,’捌’,’玖’);
cunit: array[0..14] of string = (’万’,’仟’,’佰’,’拾’,’亿’,’仟’,’佰’,’拾’,’万’,’仟’,’佰’,’拾’,’元’,’角’,’分’);
var
i : Integer;
snum,stemp : string;
begin
result := ’’;
snum := format(’%15d’,[round(n * 100)]);
for i := 0 to 14 do
begin
stemp := copy(snum,i+1,1);
if stemp=’ ’ then continue
else result := result + cnum[strtoint(stemp)] + cunit[i];
end;
//去掉多余的零
Result := StringReplace(Result, ’零元’, ’元’, [rfReplaceAll]);
Result := StringReplace(Result, ’零拾’, ’零’, [rfReplaceAll]);
Result := StringReplace(Result, ’零佰’, ’零’, [rfReplaceAll]);
Result := StringReplace(Result, ’零仟’, ’零’, [rfReplaceAll]);
Result := StringReplace(Result, ’零万’, ’万’, [rfReplaceAll]);
Result := StringReplace(Result, ’零亿’, ’亿’, [rfReplaceAll]);
Result := StringReplace(Result, ’亿万’, ’亿’, [rfReplaceAll]);
Result := StringReplace(Result, ’零零零’, ’零’, [rfReplaceAll]);
Result := StringReplace(Result, ’零零’, ’零’, [rfReplaceAll]);
Result := StringReplace(Result, ’零万’, ’万’, [rfReplaceAll]);
Result := StringReplace(Result, ’零亿’, ’亿’, [rfReplaceAll]);
Result := StringReplace(Result, ’亿万’, ’亿’, [rfReplaceAll]);
Result := StringReplace(Result, ’零元’, ’元’, [rfReplaceAll]);
if pos(’零分’,result)=0 then Result := StringReplace(Result, ’零角’, ’零’, [rfReplaceAll])
else Result := StringReplace(Result, ’零角’, ’整’, [rfReplaceAll]);
Result := StringReplace(Result, ’零分’, ’’, [rfReplaceAll]);
end;
Undeclared identifier:'Leftstr'----------------------------------------------------不用什么都面面俱到吧...你在uses后面加上StrUtils
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
procedure StrCopyEx(Des:Pchar;Src:ShortString;StartPos:integer;Len:integer);
function GetFirstNoZeroLen(s:ShortString;StartPos:integer):integer;
function FloatToPStr(F:Double;Num:Integer):ShortString;
function ConvertRMB(RMB:double):ShortString;
implementation{$R *.dfm}
procedure StrCopyEx(Des:Pchar;Src:ShortString;StartPos:integer;Len:integer);
var
i:integer;
begin
for i:=0 to Len-1 do
begin
Des[i]:=Src[StartPos+i+1];
end;
Des[Len]:=#0;
end;
{**************************************************************************
获取指定位置到第一个非零字符的长度
输入:
s---所在字符串
StartPos---开始的位置
返回:从s[i]到第一个不是'0'的长度
说明:由DecStrToPst调用
**************************************************************************}
function GetFirstNoZeroLen(s:ShortString;StartPos:integer):integer;
var
i,L:integer;
begin
L:=strlen(Pchar(String(s)));
Result:=0;
for i:=StartPos to L do
begin
if s[i]<>'0' then begin Result:=i-StartPos; exit;end;
end;
end;
//------------------------------------------------------------------------------
function DecStrToPStr(DecString:ShortString):ShortString;
const
HZStr:array[0..10] of String[2]=(('零'),('壹'),('贰'),('叁'),('肆'),('伍'),('陆'),
('柒'),('捌'),('玖'),('拾')); sUnitB:Array[1..14] Of String[4]=((''),('拾'),('佰'),('仟'),('万'),('十万'),('百万'),
('千万'),('亿'),('十亿'),('百亿'),('千亿'),('兆'),
('十兆') );
sUnit:Array[1..4] Of String[2]=((''),('万'),('亿'),('兆'));
sUnitEx:Array[1..14] Of String[4]=((''),(''),(''),(''),('万'),('十'),('百'),
('千'),('亿'),('十'),('百'),('千'),('兆'),
('十') );
sUnitEx1:Array[1..14] Of String[4]=((''),(''),(''),(''),('万'),('万'),('万'),
('万'),('亿'),('亿'),('亿'),('亿'),('兆'),
('兆') );
var
tempStr,TmpDecStr:ShortString;
tempstr1:array[0..4] of char;
L,i:integer;
TAMA:boolean;
sPartSum,sFirstPartNum:integer;
begin
if DecString='' then exit;
TmpDecStr:=IntToStr(StrToInt64(DecString));
L:=strlen(Pchar(String(TmpDecStr)));
tempStr:='';
TAMA:=TRUE;
if L <= 4 then
begin
for i:=1 to L do
if TmpDecStr[i]<>'0' then
begin
if (L-i+1)<5 then
tempstr:=tempstr+HZStr[ord(TmpDecStr[i])-48]+sUnitB[L-i+1]
else tempstr:=tempstr+HZStr[ord(TmpDecStr[i])-48]+sUnitEx[L-i+1];
TAMA:=true;
end else
begin
if ((L-i+1>1) and TAMA and (GetFirstNoZeroLen(TmpDecStr,i)>0)) then
begin
tempstr:=tempstr+sUnitEx1[L-i+1]+HZStr[ord(TmpDecStr[i])-48];
TAMA:=false;
end;//END IF
end;//END ELSE
if ((DecString[1]='0') and (GetFirstNoZeroLen(DecString,1)<>0)) then Result:='零'+tempStr
else Result:=tempStr;
exit;
end; if L mod 4<>0 then sPartSum:=(L Div 4)+1
else sPartSum:=(L Div 4);
sFirstPartNum:=L Mod 4;
if sFirstPartNum=0 then sFirstPartNum:=4;
for i:=0 to sPartSum-1 do
begin
if i>0 then StrCopyEx(tempStr1,Pchar(String(TmpDecStr)),4*(i-1)+sFirstPartNum,4)
else strcopyEx(tempStr1,Pchar(string(TmpDecStr)),0,sFirstPartNum);
tempstr:=TempStr+DecStrToPStr(tempstr1)+sUnit[sPartSum-i];
end;
Result:=tempStr;
end;
//------------------------------------------------------------------------------
function FloatToPStr(F:Double;Num:Integer):ShortString;
CONST
HZStr:array[0..10] of String[2]=(('零'),('壹'),('贰'),('叁'),('肆'),('伍'),('陆'),
('柒'),('捌'),('玖'),('拾'));
sExtendUnit:Array[1..2] of String[2]=(('角'),('分'));
var
sTemp,sExtendPart:ShortString;
iStrLen,iDotPosition:integer;
i:integer;
DecPartIsNull:Boolean;
begin
sTemp:=FloatToStr(F);
iStrLen:=strlen(Pchar(String(sTemp)));
iDotPosition:=Pos('.',sTemp);
if iDotPosition>0 then //分离小数点前后数,并对正数部分转换
begin
sExtendPart:=strpos(pchar(String(sTemp)),'.')+1;
sExtendPart[Num+1]:=#0;
Delete(sTemp,iDotPosition,iStrLen-iDotPosition+1);
end;
DecPartIsNull:=False;
if sTemp<>'' then
begin
sTemp:=DecStrToPStr(sTemp);
if sTemp<>'' then
begin
if iDotPosition>0 then
sTemp:=sTemp+'元'
else sTemp:=sTemp+'元整'; end else DecPartIsNull:=True; end else DecPartIsNull:=True; if iDotPosition>0 then //处理小数部分的转换
begin
for i:=1 to StrLen(Pchar(String(sExtendPart))) do
begin
if sExtendPart[i]<>'0' then
sTemp:=sTemp+HZStr[ord(sExtendPart[i])-48]+sExtendUnit[i]
else if not DecPartIsNull then
sTemp:=sTemp+HZStr[ord(sExtendPart[i])-48]
end;
end;
Result:=sTemp;
end;
//------------------------------------------------------------------------------
function ConvertRMB(RMB:double):ShortString;
begin
result := '';
if RMB = 0 then begin result := '零元整';exit;end; //为零处理
if RMB>99999999999999 then begin //最大值处理
result:='';exit;
end;
if RMB<0 then begin Result:='负';RMB:= RMB * -1; end; //负数处理
Result:=Result+FloatToPStr(RMB,2); //Abs :绝对值函数
end;procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text='' then
begin
application.MessageBox('不能为空值','提示',64);
exit;
end else
showmessage(ConvertRMB(strtofloat(edit1.Text)));
end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9',#8,'.']) then key:=#0;
end;end.