如何把一串数字转化为大写(50分)

  • 主题发起人 主题发起人 highsnow
  • 开始时间 开始时间
H

highsnow

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把一串数字转化为大写
如:把100转为‘壹佰圆整’
 
function SmallToBig(Small:Real):string;
Var Str:String;
DotPos:Integer;
i:Integer;
bStart:Boolean;
sResult:WideString;
SmallDit:Double;
begin
Result:='零圆整';
SmallDit:=Round((Small-INT(Small))*100)/100;
Small:=INT(Small)+SmallDit;
if SmallDit<0.01 then
Exit;
Str:=FormatFloat('#.##',Small);
DotPos:=Pos('.',Str);
if DotPos=0 then
DotPos:=length(Str)+1;
bStart:=False;
For i:=DotPos-1 downto 1 do
begin
if (Str<>'0') and (not bStart) then
bStart:=True;
if ABS(i-DotPos) MOD 4=1 then
begin
if (Str='0') and (DotPos-i<>1) then
sResult:='零'+sResult;
Case DotPos-i of
1:sResult:='圆'+sResult;
5:sResult:='万'+sResult;
9:sResult:='亿'+sResult;
13:sResult:='兆'+sResult;
end;
bStart:=False;
end;
if (Str<>'0') then
begin
Case ABS(i-DotPos) MOD 4 of
0:sResult:='仟'+sResult;
2:sResult:='拾'+sResult;
3:sResult:='佰'+sResult;
end;
end;
if i=3 then
Application.ProcessMessages;
Case Str of
'0':if bStart and (sResult[1]<>'零') then
begin
sResult:='零'+sResult;
bStart:=False;
end;
'1':sResult:='壹'+sResult;
'2':sResult:='贰'+sResult;
'3':sResult:='叁'+sResult;
'4':sResult:='肆'+sResult;
'5':sResult:='伍'+sResult;
'6':sResult:='陆'+sResult;
'7':sResult:='柒'+sResult;
'8':sResult:='捌'+sResult;
'9':sResult:='玖'+sResult;
end;
if Str<>'0' then
bStart:=True;
end;
Delete(Str,1,DotPos);
if Length(Str)>0 then
begin
Case Str[1] of
'0':if sResult<>'' then
sResult:=sResult+'零';
'1':sResult:=sResult+'壹';
'2':sResult:=sResult+'贰';
'3':sResult:=sResult+'叁';
'4':sResult:=sResult+'肆';
'5':sResult:=sResult+'伍';
'6':sResult:=sResult+'陆';
'7':sResult:=sResult+'柒';
'8':sResult:=sResult+'捌';
'9':sResult:=sResult+'玖';
end;
if Str[1]<>'0' then
sResult:=sResult+'角';
if Length(Str)>1 then
begin
Case Str[2] of
'1':sResult:=sResult+'壹';
'2':sResult:=sResult+'贰';
'3':sResult:=sResult+'叁';
'4':sResult:=sResult+'肆';
'5':sResult:=sResult+'伍';
'6':sResult:=sResult+'陆';
'7':sResult:=sResult+'柒';
'8':sResult:=sResult+'捌';
'9':sResult:=sResult+'玖';
end;
if Str[2]<>'0' then
sResult:=sResult+'分';
end else
sResult:=sResult+'整';
end else
sResult:=sResult+'整';
Result:=sResult;
end;
直接可以用
我用过这个函数打印票据
 
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)他自动默认小数点后两位

 
多人接受答案了。
 
后退
顶部