unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMenu;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
XPMenu1: TXPMenu;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject
var Key: Char);
procedure Edit1Change(Sender: TObject);
procedure Edit1Exit(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//本函数用于将小于十万亿元的小写金额转换为大写
Function NtoC( n0 :real) :String;
Function IIF( b :boolean
s1,s2 :string) :string;
begin if b then IIF:= s1 else IIF:=s2;
end
//本函数的功能一目了然: 当b为真时返回s1,否则返回s2
Const c= '零壹贰叁肆伍陆柒捌玖◇分角圆拾佰仟万拾佰仟亿拾佰仟万';
var L,i,n, code :integer
Z :boolean
s,s1,s2 :string;
begin
s:= FormatFloat('0.00', n0);
L:= Length( s);
Z:= n0<1;
For i:= 1 To L-3 do
begin
Val( Copy( s, L-i-2, 1), n, code);
s1:=IIf( (n=0) And (Z Or (i=9) Or (i=5) Or (i=1)), '', Copy( c, n*2+1, 2))
+ IIf( (n=0) And ((i<>9) And (i<>5) And (i<>1) Or Z And (i=1)), '', Copy( c, (i+13)*2-1, 2))
+ s1;
Z:= (n=0);
end;
Z:= False;
For i:= 1 To 2 do
begin
Val( Copy( s, L-i+1, 1), n, code);
s2:= IIf( (n=0) And ((i=1) Or (i=2) And (Z Or (n0<1))), '', Copy( c, n*2+1, 2))
+ IIf( (n>0), Copy( c,(i+11)*2-1, 2), IIf( (i=2) Or Z, '', '整'))
+ s2;
Z:= (n=0);
end;
For i:= 1 To Length( s1) do If Copy(s1, i, 4) = '亿万' Then Delete(s1,i+2,2);
NtoC:= IIf(n0=0, '零', s1+s2);
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text :=NtoC(strTofloat(edit1.Text));
end;
procedure TForm1.Edit1KeyPress(Sender: TObject
var Key: Char);
begin
if key =Char(-24157) then key:=#46;
if not ( key in ['0'..'9','.',char(8),char(13)])then key:=#0;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
if trim(edit1.Text)='' then edit1.Text :='0';
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
if trim(edit1.Text)='' then edit1.Text :='0';
Edit1.Text :=FloatToStr(StrToFloat(Edit1.Text));
end;
end.