2700 怎样转换成为---贰仟柒佰元?(0分)

  • 主题发起人 主题发起人 maozhuxi
  • 开始时间 开始时间
M

maozhuxi

Unregistered / Unconfirmed
GUEST, unregistred user!
写个打印票据程序
需要把数字转换为汉字!
分送完了,希望大家帮帮忙。
 
转别人的代码,可以用的
function.MoneyName(Value: Double): string;
const
SCnNumber = '零壹贰叁肆伍陆柒捌玖';
SCnPower = '拾佰仟';
var
V, V1: Double;
X: array[0..4] of Integer
//分别表示万亿位、亿位、万位、元位、分位
N, P, I, J: Integer
//内部使用
S: array[0..4] of string
//目标串
B: array[0..4] of Boolean
//是否零前缀
BK, BL: Boolean;
begin
V := Int(Value);
X[4] := Trunc((Value - V) * 100 + 0.5)
//分位
X[0] := 0
//万亿位
X[1] := 0
//亿位
X[2] := 0
//万位
X[3] := 0
//元位
I := 3;
while (V > 0) and (I >= 0) do
begin
V1 := Int(V / 10000) * 10000;
X := Trunc(V - V1);
Dec(I);
V := V1 / 10000;
end;
BL := True
//检查是否全为零
for I := 0 to 4 do
if X <> 0 then
begin
BL := False;
Break;
end;
if BL then
Result := '零元整'
else
begin
//先计算整数部分每节的串
for I := 0 to 3 do
begin
S := '';
if X > 0 then
begin
B := False;
P := 1000;
BK := False
//前位为零
BL := False
//未记录过
for J := 0 to 3 do
begin
N := X div P
//当前位
X := X - N * P
//剩余位
P := P div 10
//幂
if N = 0 then //当前位为零
begin
if J = 0 then
B := True //如果是最高位
else
if BL then //如果未记录过
BK := True;
end
else
begin
if BK then
S := S + '零';
BL := True;
S := S + Copy(SCnNumber, N * 2 + 1, 2);
if J < 3 then
S := S + Copy(SCnPower, (3 - J) * 2 - 1, 2);
BK := False;
end;
end;
end;
end;
//小数部分
BL := False;
if X[4] mod 10 > 0 then
S[4] := Copy(SCnNumber, (X[4] mod 10) * 2 + 1, 2) + '分'
else
begin
BL := True;
S[4] := '';
end;
X[4] := X[4] div 10;
if X[4] > 0 then
begin
S[4] := Copy(SCnNumber, (X[4] mod 10) * 2 + 1, 2) + '角' + S[4];
B[4] := False;
end
else
B[4] := not BL;
//合并串
Result := '';
BL := False;
for I := 0 to 3 do
if Length(S) > 0 then
begin
if BL then
if B then
Result := Result + '零';
Result := Result + S;
case I of
0, 2: Result := Result + '万';
1: Result := Result + '亿';
3: Result := Result + '元';
end;
BL := True;
end
else
if BL then
case I of
1: Result := Result + '亿';
3: Result := Result + '元';
end;
if Length(S[4]) = 0 then
Result := Result + '整'
else
begin
if B[4] then
if BL then
Result := Result + '零';
Result := Result + S[4];
end;
end;
end;
 
使用三方控件就行了
 
Function TFormFhdCw.XxToDx(const hjnum:real):String

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 do
begin
cc:=Vstr[iCount]

if cc<>' ' then
begin
zzz:=xxbb[iCount]

if cc='0' then
begin
if iZero<1 then //*对“零”进行判断*//
cc:='零'
else
cc:=''

if iCount=5 then //*对万位“零”的处理*//
if copy(result,length(result)-1,2)='零' then
////////////////////////////////////////////////////
//Bug修改处////////////////////////////////////////
Begin
if copy(result,Length(result)-3,2)<>'亿' then
result:=copy(result,1,length(result)-2)+xxbb[iCount]
+'零'

End
/////////////////////////////////////////////////////
else
result:=result+xxbb[iCount]

cc1:=cc

zzz:=''

iZero:=iZero+1

end
else
begin
if cc='.' then
begin
cc:=''

if (cc1='') or (cc1='零') then
begin
Presult:=copy(result,1,Length(result)-2)

result:=Presult

iZero:=15

end

if iZero>=1 then
zzz:=xxbb[9]
else
zzz:=''

vPoint:=1

end
else
begin
iZero:=0

cc:=uppna[StrToInt(cc)]

end
end

result:=result+(cc+zzz)
end

end

If Vstr[11]='0' then //*对小数点后两位进行处理*//
begin
if Vstr[12]<>'0' then
begin
cc:='零'

result:=result+cc

cc:=uppna[StrToInt(Vstr[12])]

result:=result+(uppna[0]+cc+xxbb[12])

end
end
else
begin
if iZero=15 then
begin
cc:='零'

result:=result+cc

end

cc:=uppna[StrToInt(Vstr[11])]

result:=result+(cc+xxbb[11])

if Vstr[12]<>'0' then
begin
cc:=uppna[StrToInt(Vstr[12])]

result:=result+(cc+xxbb[12])

end

end

result:=result+'正';
 
谢谢大家
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
738
import
I
后退
顶部