如题,大家帮忙了。要符合人民币大小写规则,如70305.3 ,大写为柒万零叁佰零伍元叁角整 谢谢!
解决方案 »
- StringGrid指定单元格背景颜色改变
- TWebBrowser怎么释放内存?
- 各位兄弟,以下代码已经经过我实验是可以把二个mp3全成一个的
- chart画实时曲线!
- 用QuickReport 控件打印报表时,如何在程序中指定打印纸的长度?
- 超简单
- 用delphi开发基于internet的非浏览器人机界面的系统技术要点?
- Delphi6连接Oracle10g 64位(Win7 64位系统),出错提示"测试连接失败,----未找到Oracle客户端和网络组件-----",求助!
- 请教关于intenet编程的问题
- 一个关于矢量汉字的问题
- 老板要做电子政务,现在接了一个县政府的项目!
- delphi的什么类(非界面类)可以接收windows消息?
给你个例子把吧!
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function LowcasetoUpcase(xx:double):string;
var
i:Integer;
j,dxhj:string;
zero:boolean;
begin
j:=trim(inttostr(Round(xx*100)));
if(pos('.',j))<>0 then j:=copy(j,1,pos('.',j)-1);
if j='' then j:='0';
if copy(j,length(j),1)='0' then
begin
dxhj:='整';
zero:=true;
end
else
begin
dxhj:='';
zero:=false;
end;
for i:=0 to length(j)-1 do
begin
if strtoint(copy(j,length(j)-i,1))<>0 then
case i of
0:dxhj:='分'+dxhj;
1:dxhj:='角'+dxhj;
2:dxhj:='元'+dxhj;
3:dxhj:='拾'+dxhj;
4:dxhj:='佰'+dxhj;
5:dxhj:='仟'+dxhj;
6:dxhj:='万'+dxhj;
7:dxhj:='拾'+dxhj;
8:dxhj:='佰'+dxhj;
9:dxhj:='仟'+dxhj;
10:dxhj:='亿'+dxhj;
11:dxhj:='拾'+dxhj;
end;
// if i=2 then dxhj:='元'+dxhj;
// if i=6 then dxhj:='万'+dxhj;
case strtoint(copy(j,length(j)-i,1)) of
0:begin
if not zero then dxhj:='零'+dxhj;
zero:=true;
end;
1:begin
dxhj:='壹'+dxhj;
zero:=false;
end;
2:begin
dxhj:='贰'+dxhj;
zero:=false;
end;
3:begin
dxhj:='叁'+dxhj;
zero:=false;
end;
4:begin
dxhj:='肆'+dxhj;
zero:=false;
end;
5:begin
dxhj:='五'+dxhj;
zero:=false;
end;
6:begin
dxhj:='六'+dxhj;
zero:=false;
end;
7:begin
dxhj:='七'+dxhj;
zero:=false;
end;
8:begin
dxhj:='八'+dxhj;
zero:=false;
end;
9:begin
dxhj:='玖'+dxhj;
zero:=false;
end;
end;
end;
if dxhj='整' then dxhj:='';
result:=dxhj;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := LowcasetoUpcase(StrtoFloat(Edit1.Text));
ShowMessage(LowcasetoUpcase(StrtoFloat(Edit1.Text)));
end;end.
function NumberCn(mNumber: Real): WideString;constcPointCn: WideString = '点十百千万十百千亿十百千';cNumberCn: WideString = '零一二三四五六七八九';varI, L, P: Integer;S: string;beginResult := '';if mNumber = 0 then beginResult := cNumberCn[1];Exit;end;S := FloatToStr(mNumber);if Pos('.', S) <= 0 then S := S + '.';P := Pos('.', S);L := Length(S);for I := 1 to L doif P > I thenResult := Result + cNumberCn[StrToInt(S[I]) + 1] + cPointCn[P - I]else if P = I then beginResult := 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]);end else if P < I thenResult := Result + cNumberCn[StrToInt(S[I]) + 1];if Result[Length(Result)] = cPointCn[1] thenResult := Copy(Result, 1, Length(Result) - 1);if Result[1] = cPointCn[1] then Result := cNumberCn[1] + Result;if (Length(Result) > 1) and (Result[2] = cPointCn[2]) and(Result[1] = cNumberCn[2]) thenDelete(Result, 1, 1);end; { NumberCn }function MoneyCn(mMoney: Real): WideString;varP: Integer;beginif mMoney = 0 then beginResult := '无';Exit;end;Result := NumberCn(Round(mMoney * 100) / 100);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]);P := Pos('点', Result);if P > 0 then beginInsert('分', Result, P + 3);Insert('角', Result, P + 2);Result := StringReplace(Result, '点', '圆', [rfReplaceAll]);Result := StringReplace(Result, '角分', '角', [rfReplaceAll]);Result := StringReplace(Result, '零分', '', [rfReplaceAll]);Result := StringReplace(Result, '零角', '', [rfReplaceAll]);Result := StringReplace(Result, '分角', '', [rfReplaceAll]);if Copy(Result, 1, 2) = '零圆' thenResult := StringReplace(Result, '零圆', '', [rfReplaceAll]);end else Result := Result + '圆整';Result := '人民币' + Result;end; { MoneyCn }
function Tjfdy.SmallTOBig(small:real):string;
var
SmallMonth,BigMonth:string;
wei1,qianwei1:string[2];
qianwei,dianweizhi,qian:integer;
begin
{------- 修改参数令值更精确 -------}
{小数点后的位数,需要的话也可以改动该值}
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;
var Vstr,zzz,cc,cc1,Presult:string;xxbb:array[1..12]of string;uppna:array[0..9] of string;iCount,iZero,vPoint,vdtlno:integer;begin//*设置大写中文数字和相应单位数组*//xxbb[1]:='亿';xxbb[2]:='仟';xxbb[3]:='佰';xxbb[4]:='拾';xxbb[5]:='万';xxbb[6]:='仟';xxbb[7]:='佰';xxbb[8]:='拾';xxbb[9]:='元';xxbb[10]:='.';xxbb[11]:='角';xxbb[12]:='分';uppna[0]:='零';uppna[1]:='壹';uppna[2]:='贰';uppna[3]:='叁';uppna[4]:='肆';uppna[5]:='伍';uppna[6]:='陆';uppna[7]:='柒';uppna[8]:='捌';uppna[9]:='玖';Str(hjnum:12:2,Vstr);cc:='';cc1:='';zzz:='';result:='';presult:='';iZero:=0;vPoint:=0;for iCount:=1 to 10 dobegincc:=Vstr[iCount];if cc<>' ' thenbeginzzz:=xxbb[iCount];if cc='0' thenbeginif iZero<1 then //*对“零”进行判断*//cc:='零'elsecc:='';if iCount=5 then //*对万位“零”的处理*//if copy(result,length(result)-1,2)='零' thenresult:=copy(result,1,length(result)-2)+xxbb[iCount]+'零'elseresult:=result+xxbb[iCount];cc1:=cc;zzz:='';iZero:=iZero+1;endelsebeginif cc='.' thenbegincc:='';if (cc1='') or (cc1='零') thenbeginPresult:=copy(result,1,Length(result)-2);result:=Presult;iZero:=15;end;if iZero>=1 thenzzz:=xxbb[9]elsezzz:='';vPoint:=1;endelsebeginiZero:=0;cc:=uppna[StrToInt(cc)];endend;result:=result+(cc+zzz)end;end;If Vstr[11]='0' then //*对小数点后两位进行处理*//beginif Vstr[12]<>'0' thenbegincc:='零';result:=result+cc;cc:=uppna[StrToInt(Vstr[12])];result:=result+(uppna[0]+cc+xxbb[12]);endendelsebeginif iZero=15 thenbegincc:='零';result:=result+cc;end;cc:=uppna[StrToInt(Vstr[11])];result:=result+(cc+xxbb[11]);if Vstr[12]<>'0' thenbegincc:=uppna[StrToInt(Vstr[12])];result:=result+(cc+xxbb[12]);end;end;result:=result+'正';end;
function TForm1.xTOd(i:Real):string;
const
d='零壹贰叁肆伍陆柒捌玖分角元拾佰仟万拾佰仟亿';
var
m,k:string;
j:integer;
begin
k:='';
m:=floattostr(int(i*100));
for j:=length(m) downto 1 do
k:=k+d[(strtoint(m[Length(m)-j+1])+1)*2-1]+
d[(strtoint(m[Length(m)-j+1])+1)*2]+d[(10+j)*2-1]+d[(10+j)*2];
xTOd:=k;
end; 调用:
procedure TForm1.Button1Click(Sender: TObject);
var
Sum:real;
begin
sum:=12.34;
showmessage('人民币大写:'+xTOd(Sum));
end;
var SmallMonth,BigMonth:string;
wei1,qianwei1:string[2];
wei,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;