Function SmallToBig(Number:string):String;
var
numberunit: array[1..16] of string;{单位数组}
numbervalue: array[1..10] of string;{数字数组}
number2:string;{角分数串}
number1:string;{元以上数串}
numbertmp:string;{临时数串}
i:integer; {循环变量}
flag:integer;{角元分隔}
zeroflag:integer;{本位零标志 0:本位不为零 1:本位为零}
fzeroflag:integer;{低位是否有非零数标志 0:低位无非零数 1:低位有非零数}
ooflag:integer;{最高位是否为零标志 0:最高位为零 1:最高位不为零}
resulttotal:string;{总结果串}
result1:string;{元以上结果串}
result2:string;{角分结果串}
Begin
numberunit[2] :='分';
numberunit[1] :='角';
numberunit[3] :='元';
numberunit[4] :='拾';
numberunit[5] :='佰';
numberunit[6] :='仟';
numberunit[7] :='万';
numberunit[8] :='拾';
numberunit[9] :='佰';
numberunit[10] :='仟';
numberunit[11] :='亿';
numberunit[12] :='拾';
numberunit[13] :='佰';
numberunit[14] :='仟';
numberunit[15] :='万';
numberunit[16] :='亿';
numbervalue[1] :='零';
numbervalue[2] :='壹';
numbervalue[3] :='贰';
numbervalue[4] :='叁';
numbervalue[5] :='肆';
numbervalue[6] :='伍';
numbervalue[7] :='陆';
numbervalue[8] :='柒';
numbervalue[9] :='捌';
numbervalue[10] :='玖';
number2 :='';
number1 :='';
{分解角分元数串}
flag:=1;
for i:=1 to length(number) do
begin
if number[i]='.' then Flag :=2;
if flag=1 then number1:=number1+number[i]
else
if number[i]<>'.' then number2 := number2+number[i];
end;
{除高位零}
numbertmp := number1;
number1 := '';
ooflag := 0;
for i:=1 to length(numbertmp) do
begin
if (numbertmp[i]<>'0') then ooflag:=1;
if ooflag=1 then number1:=number1+numbertmp[i];
end;
{最大值为亿亿元}
if length(number1)>14 then
begin
showmessage('numbercnv out of range!');
SmallToBig:='';
end; {组织元以上结果串}
result1:='';
zeroflag:=0;
Fzeroflag:=1;
for i:=length(number1) downto 1 do
begin
if (i=length(number1)) and (strtoint(number1[i])=0) then{个位为零时}
begin
fzeroflag:=0;
zeroflag:=1;
result1:='元';
end
else
if (i<length(number1)) and (strtoint(number1[i])=0) then{中间零处理}
begin
if (length(number1)-i=4) or (length(number1)-i=8) then{万与亿位设定}
begin
if (length(number1)-i=4) and (length(number1)>=8) then
begin
if NOT((length(number1)-i=4)and(strtoint(number1[i])=0)
and(strtoint(number1[i-1])=0) and(strtoint(number1[i-2])=0)
and(strtoint(number1[i-3])=0)) then
result1:=numberunit[length(number1)-i+3]+result1;
end
else
result1:=numberunit[length(number1)-i+3]+result1;
fzeroflag:=0;
end;
if fzeroflag=1 then{中间零设置}
if zeroflag=0 then
result1:=numbervalue[strtoint(number1[i])+1]+result1;
zeroflag:=1;
end
else{非零数处理}
begin
fzeroflag:=1;
zeroflag:=0;
result1:=numberunit[length(number1)-i+3]+result1;
result1:=numbervalue[strtoint(number1[i])+1]+result1;
end;
end;
{组织角分结果串}
result2:='';
for i:=1 to length(number2) do
begin
if i<3 then
begin
if strtoint(number2[i])<>0 then
begin
result2:=result2+numbervalue[strtoint(number2[i])+1];
result2:=result2+numberunit[i];
end;
end;
end;
ResultTotal := Result1+Result2;
SmallToBig := ResultTotal;
End;
var
numberunit: array[1..16] of string;{单位数组}
numbervalue: array[1..10] of string;{数字数组}
number2:string;{角分数串}
number1:string;{元以上数串}
numbertmp:string;{临时数串}
i:integer; {循环变量}
flag:integer;{角元分隔}
zeroflag:integer;{本位零标志 0:本位不为零 1:本位为零}
fzeroflag:integer;{低位是否有非零数标志 0:低位无非零数 1:低位有非零数}
ooflag:integer;{最高位是否为零标志 0:最高位为零 1:最高位不为零}
resulttotal:string;{总结果串}
result1:string;{元以上结果串}
result2:string;{角分结果串}
Begin
numberunit[2] :='分';
numberunit[1] :='角';
numberunit[3] :='元';
numberunit[4] :='拾';
numberunit[5] :='佰';
numberunit[6] :='仟';
numberunit[7] :='万';
numberunit[8] :='拾';
numberunit[9] :='佰';
numberunit[10] :='仟';
numberunit[11] :='亿';
numberunit[12] :='拾';
numberunit[13] :='佰';
numberunit[14] :='仟';
numberunit[15] :='万';
numberunit[16] :='亿';
numbervalue[1] :='零';
numbervalue[2] :='壹';
numbervalue[3] :='贰';
numbervalue[4] :='叁';
numbervalue[5] :='肆';
numbervalue[6] :='伍';
numbervalue[7] :='陆';
numbervalue[8] :='柒';
numbervalue[9] :='捌';
numbervalue[10] :='玖';
number2 :='';
number1 :='';
{分解角分元数串}
flag:=1;
for i:=1 to length(number) do
begin
if number[i]='.' then Flag :=2;
if flag=1 then number1:=number1+number[i]
else
if number[i]<>'.' then number2 := number2+number[i];
end;
{除高位零}
numbertmp := number1;
number1 := '';
ooflag := 0;
for i:=1 to length(numbertmp) do
begin
if (numbertmp[i]<>'0') then ooflag:=1;
if ooflag=1 then number1:=number1+numbertmp[i];
end;
{最大值为亿亿元}
if length(number1)>14 then
begin
showmessage('numbercnv out of range!');
SmallToBig:='';
end; {组织元以上结果串}
result1:='';
zeroflag:=0;
Fzeroflag:=1;
for i:=length(number1) downto 1 do
begin
if (i=length(number1)) and (strtoint(number1[i])=0) then{个位为零时}
begin
fzeroflag:=0;
zeroflag:=1;
result1:='元';
end
else
if (i<length(number1)) and (strtoint(number1[i])=0) then{中间零处理}
begin
if (length(number1)-i=4) or (length(number1)-i=8) then{万与亿位设定}
begin
if (length(number1)-i=4) and (length(number1)>=8) then
begin
if NOT((length(number1)-i=4)and(strtoint(number1[i])=0)
and(strtoint(number1[i-1])=0) and(strtoint(number1[i-2])=0)
and(strtoint(number1[i-3])=0)) then
result1:=numberunit[length(number1)-i+3]+result1;
end
else
result1:=numberunit[length(number1)-i+3]+result1;
fzeroflag:=0;
end;
if fzeroflag=1 then{中间零设置}
if zeroflag=0 then
result1:=numbervalue[strtoint(number1[i])+1]+result1;
zeroflag:=1;
end
else{非零数处理}
begin
fzeroflag:=1;
zeroflag:=0;
result1:=numberunit[length(number1)-i+3]+result1;
result1:=numbervalue[strtoint(number1[i])+1]+result1;
end;
end;
{组织角分结果串}
result2:='';
for i:=1 to length(number2) do
begin
if i<3 then
begin
if strtoint(number2[i])<>0 then
begin
result2:=result2+numbervalue[strtoint(number2[i])+1];
result2:=result2+numberunit[i];
end;
end;
end;
ResultTotal := Result1+Result2;
SmallToBig := ResultTotal;
End;
解决方案 »
- 如何使窗体大小超出屏幕尺寸?
- 辞职了。。。。。天亮了。。。。。早就想走了。。。。。。。
- 各位,請進來一敘
- 如何获得datagrid的当前行号
- 请教数据导出与接收的问题
- ms sql server 重启后,用ADO连接数据库的程序老联不上。
- 那位大虾最近有时间,帮我做一个比较简单的Web Server Application程序,有报酬
- 招聘 Delphi 程序员 同时熟悉c/c++
- Delphi 中有没有 JavaScript 的 ParseInt() 函数???
- 关于SQL???
- 如何实时处理声卡 line in 的声音,并实时通过 line out 播放?一定给分!!
- 建议大家能不能留下个人的QQ好联系啊! : )
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;
var iNumLength:Integer;//数字长度
i,k:Integer;
sNumber:String;
arChinseUnit:Array [0..13] of String;
arALB:Array [0..9] of String;
bZeroFlag,bHasUnit:Boolean;
begin
arChinseUnit[0] :='分'; arChinseUnit[1] :='角'; arChinseUnit[2] :='元';
arChinseUnit[3] :='拾'; arChinseUnit[4] :='佰'; arChinseUnit[5] :='仟';
arChinseUnit[6] :='万'; arChinseUnit[7] :='拾'; arChinseUnit[8] :='佰';
arChinseUnit[9] :='仟'; arChinseUnit[10] :='亿'; arChinseUnit[11] :='拾';
arChinseUnit[12] :='佰'; arChinseUnit[13] :='仟';
arALB[0]:='零'; arALB[1]:='壹'; arALB[2]:='贰'; arALB[3]:='叁'; arALB[4]:='肆';
arALB[5]:='伍'; arALB[6]:='陆'; arALB[7]:='柒'; arALB[8]:='捌'; arALB[9]:='玖'; Try
sNumber:=Trim(FloatToStr(Abs(Number)));
Except
Result:='转换出错!';
Exit;
end;
i:=Pos('.',sNumber);
iNumLength:=StrLen(PChar(sNumber));
if (iNumLength-i>13) or (i>13) then begin //整数超过14位
Result:='数字太大,无法转换!';
Exit;
end; //将数字制作成0.00的式样
if ( ( (iNumLength-i)>=3 ) and (i>0) ) then //处理小数点后大于2位的情况
sNumber:=Copy(sNumber,1,i+2);
if ( ( (iNumLength-i)=1 ) and (i>0) ) then //处理小数点后只有一位的情况补足零
sNumber:=sNumber+'0';
if i=0 then //处理无小数的情况,无小数点
sNumber:=sNumber+'.00';
if i=iNumLength then //处理无小数的情况,有小数点
sNumber:=sNumber+'00'; //裁去小数点
i:=Pos('.',sNumber);
sNumber:=Copy(sNumber,1,i-1)+Copy(sNumber,i+1,2); iNumLength:=StrLen(PChar(sNumber));
bZeroFlag:=False;
bHasUnit:=False;
Result:='';
For I:=1 to iNumLength do begin //处理整数部分
//处理当前位
k:=StrToInt(Copy(sNumber,i,1)); //当前位大于0
if k<>0 then begin
//当前位已经有位标志如佰
bHasUnit:=False;
//之前的数字是否需要0如叁仟零壹
if bZeroFlag then begin
Result:=Result+'零'+arALB[k]+arChinseUnit[iNumLength-i];
bZeroFlag:=False;
end else //end if bZeroFlag
Result:=Result+arALB[k]+arChinseUnit[iNumLength-i];
end; if k=0 then begin
if ( (arChinseUnit[iNumLength-i]<>'角') and (arChinseUnit[iNumLength-i]<>'拾')
and (arChinseUnit[iNumLength-i]<>'佰')
and (arChinseUnit[iNumLength-i]<>'仟')) then
if not bHasUnit then begin
Result:=Result+arChinseUnit[iNumLength-i];
bHasUnit:=True;
end; //end if not bHasUnit
bZeroFlag:=True; //如果元前有零且金额小于一元(实际情况为0.1 ...);
if (arChinseUnit[iNumLength-i]='元') and (Number<1) then
bZeroFlag:=False;
end;//end k=0 end;//end for //处理小数部分的最后一位
k:=StrToInt(Copy(sNumber,iNumLength,1));
if k=0 then
if Copy(Result,Length(Result)-1,2)='元' then
Result:=Result+'整'
else
Result:=Copy(Result,1,Length(Result)-2)+'整'; if ((Length(sNumber)=3) and (StrToInt(sNumber)<100)) then
Result:=Copy(Result,3,Length(Result)-2); if ((Length(sNumber)=3) and (StrToInt(sNumber)<10)) then
Result:=Copy(Result,3,Length(Result)-2);
if Number<0 then
Result:='币:负'+Result
else
Result:='币:'+Result;
end;
begin
case char1 of
'0': result:='零';
'1': result:='壹';
'2': result:='贰';
'3': result:='叁';
'4': result:='肆';
'5': result:='伍';
'6': result:='陆';
'7': result:='柒';
'8': result:='捌';
'9': result:='玖';
end;
end;