关于小写转大写的问题!!

yyzzff 2003-10-17 03:21:47
以下是我写的一个小写转大写的过程,因为要输出大写还要在前面加上那个带圆圈的符号,我用EINDOWS画图画了一个,但输出的时候却在大写字母和圆圈之间空了一个圆圈不能输出,不知为什么,哪位大虾能帮我看看这程序有什么问题,有不合理的地方敬请指出!!!
.
.
.
procedure tform1.smalltobig(small:real);
var
dje,smallmonth:string;
wei1:string;
dianweizhi,qian,n,i,j:integer;
Bitmap:TBitmap;
xje:real;
begin
pixx:=159*8;
smallmonth:=formatfloat('0.00',k);
//xje:=k*100;
//dje:=formatfloat(' ',xje);
dianweizhi:=pos('.',smallmonth);//小数点位置
//qian:=length(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;
printer.Canvas.TextOut(pixx,page*81*8+63*8,wei1);
pixx:=pixx-13*8;
end;
end;
if length(smallmonth)<10 then
begin
n:=10-length(smallmonth);
for i:=1 to n+1 do
begin
Bitmap:=TBitmap.Create;
Bitmap.LoadfromFile('a.bmp');
printer.Canvas.draw(pixx,page*81*8+63*8,bitmap);
//printer.Canvas.TextOut(pixx,page*81*8+63*8,'');
pixx:=pixx-13*8;
end;
end;
.
.
.
...全文
87 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahanag 2003-10-17
  • 打赏
  • 举报
回复
我有一个函数,你可以试试。
Function CovMoney(money: Double; Var ilength: Integer): String;
// 小写金额转换成大写金额
Var
sStr, buf, sPower, buf1, str00: String;
i, j, iPosition, lenth, iTmp: Integer;
flag0: boolean;
Begin
If money = 0 Then
Begin
Result := '零元整';
ilength := 6;
exit;
End;
iPosition := 0;
i := 1;
buf1 := trim(Format('%12.2f', [money]));
lenth := Length(buf1);
buf := ' '; // 16 bit space;
j := 1;
For i := 16 - lenth To 15 Do
Begin
buf[i] := buf1[j];
j := j + 1;
End;

For i := 1 To 15 Do
Begin
iTmp := ord(buf[i]);
If ((iTmp >= 49) And (iTmp <= 58)) Or (chr(iTmp) = ',') Then
break;
End;
While i <= 15 Do
Begin
flag0 := True;
iTmp := 0;
Case i - 1 Of
0, 4, 8: sPower := '仟';
1, 5, 9: sPower := '佰';
2, 6, 10: sPower := '拾';
3:
Begin
sPower := '亿';
If copy(buf, i, 1) = '0' Then
Begin
sStr := sStr + sPower;
iPosition := iPosition + 2;
iTmp := 1;
End;
End;
7:
Begin
sPower := '万';
If copy(buf, i, 1) = '0' Then
Begin
sStr := sStr + sPower;
iPosition := iPosition + 2;
iTmp := 1;
End;
End;
11:
Begin
sPower := '元';
If (copy(buf, i, 1) = '0') And (iPosition <> 0) Then
Begin
sStr := sStr + sPower;
iPosition := iPosition + 2;
iTmp := 1;
End;
End;
12:
Begin
flag0 := False;
If (copy(buf, i + 1, 1) = '0') And (copy(buf, i + 2, 1) = '0') Then
Begin
sPower := '整';
sStr := sStr + sPower;
iPosition := iPosition + 2;
iTmp := 2;
End;
End;
13: sPower := '角';
14:
Begin
If copy(buf, i, 1) = '0' Then
iTmp := 2;
sPower := '分';
End;
End;
If (flag0 = True) And (iTmp = 0) Then
Begin
If i > 0 Then
iPosition := iPosition + Sjoin(sStr, sPower, copy(buf, i, 1), copy(buf, i+ 1, 1), iPosition)
Else
iPosition := iPosition + Sjoin(sStr, sPower, copy(buf, i, 1), copy(buf,i, 1), iPosition);
End;
If iTmp = 2 Then
break
Else
i := i + 1;
End;
If (ilength <> 0) Then
ilength := iPosition;
If pos('整', sStr) < 1 Then
If pos('分', sStr) < 1 Then
sStr := sStr + '分';
Result := Trim(sStr);
End;

//////////////////////////////////////////////////////////////////////////
Function Sjoin(Var buff: String; sString: String; digit: String; nextdig:String; iPos: Integer): Integer;
Var
dig: String; // * 1
flag0: Boolean;
Begin
flag0 := True;

If digit = '0' Then
If nextdig <> '0' Then
dig := '零'
Else
flag0 := False;
If digit = '1' Then
dig := '壹';
If digit = '2' Then
dig := '贰';
If digit = '3' Then
dig := '叁';
If digit = '4' Then
dig := '肆';
If digit = '5' Then
dig := '伍';
If digit = '6' Then
dig := '陆';
If digit = '7' Then
dig := '柒';
If digit = '8' Then
dig := '捌';
If digit = '9' Then
dig := '玖';

If digit = '0' Then
If (flag0 = True) And (iPos <> 0) Then
Begin
buff := buff + dig;
//Sjoin := 2;
Result := 2;
End
Else
//Sjoin := 0;
Result := 0
Else
Begin
buff := buff + dig;
buff := buff + sString;
//Sjoin := 4;
Result := 4;
End;
End;

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧