数字的大小写转换(金额)?(100分)

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

hzq

Unregistered / Unconfirmed
GUEST, unregistred user!
请问小写的数字如何转换为大写的如:
1220344.89自动转换为 壹佰贰拾贰万零参佰肆拾肆圆捌角玖分
 
数组存大写字母,然后计算小数点的位置,
 
写一个函数嘛,我先预订了所有的分。不准抢啊!
 
不就是写一个函数,我已经写过一个了,你先要了解我们怎么念中文的数字,然后再抽象他们
不就可以了,具体的代码我也不想写了,你好好想想就可以了
 
CASE或者if ...else
if .... else
..
 
Function ChineseMoney(value:double):String;
var
SmallMoney,BigMoney:string;
wei1,qianwei1:string[2];
qianwei,dianweizhi,qian,number:Integer;
neg :Boolean;
begin
qianwei := -2 ;//小数点后的位置,这里为2位
neg := False;
SmallMoney := FormatFloat('0.00',value);
number := Length(SmallMoney);
if copy(trim(SmallMoney),1,1) ='-' then
begin
neg := True;
number := number -1;
SmallMoney := Copy(SmallMoney,2,number);
end;

dianweizhi := pos('.',SmallMoney);
for qian:= Length(SmallMoney)do
wnto 1do
//循环小写金额的每一位,从右到左
begin
if qian<>dianweizhi then
//如果读到的不是小数点就继续
begin
case StrToInt(Copy(SmallMoney,qian,1)) of
1:wei1 := '壹';
2:wei1 := '贰';
3:wei1 := '叁';
4:wei1 := '肆';
5:wei1 := '伍';
6:wei1 := '陆';
7:wei1 := '柒';
8:wei1 := '捌';
9:wei1 := '玖';
0:wei1 := '零';
end;
case qianwei of //判断大写位置
-3:qianwei1 :='厘';
-2:qianwei1 :='分';
-1:qianwei1 :='角';
0:qianwei1 :='元';
1,5,9:qianwei1 :='拾';
2,6,10:qianwei1 :='佰';
3,7,11:qianwei1 :='千';
4:qianwei1 :='万';
8:qianwei1 :='亿';
end;
inc (qianwei);
BigMoney := wei1+qianwei1+BigMoney;
//组合成大写金额
end;
end;
if neg then
Result := '负'+BigMoney
else
Result := BigMoney;
end;
 
function ToDaxie(Money :do
uble) : string;
var
XiaoXie,DaXie : String;
Buf,TmpBuf : string;
I : integer;
P : integer;
MM : string;
begin
XiaoXie := '0123456789';
DaXie := '零壹贰叁肆伍陆柒捌玖';
MM := '分角拾佰仟万拾佰仟亿拾佰仟万';
Buf := FloatToStr(Money);
TmpBuf := '圆';
P := Pos('.',Buf);
if P = 0 then
P := Length(Buf) + 1;
for I := P + 1 to Length(Buf)do
begin
if Buf[P + 1] <> '0' then
TmpBuf := TmpBuf + Buf[P + 1] + Copy(MM, 5 - 2*(I - P),2);
end;
for I := 1 to P - 1do
begin
if Buf[P - I] <> '0' then
begin
if I <> 1 then
TmpBuf := Copy(MM,2*I + 1,2) + TmpBuf;
TmpBuf := Buf[P - I] + TmpBuf;
end;
end;
Buf := TmpBuf;
for I := 1 to Length(Buf)do
begin
if Buf <> '0' then
begin
P := Pos(Buf,XiaoXie);
if P > 0 then
Buf := StringReplace(Buf,Buf,Copy(DaXie,2*P-1,2),[rfReplaceAll]);
end;
end;
result := Buf;
end;
 
这么热闹啊,大家都来争答这个问题!
 
我也来试:
function xtod(xiao:double):string;
var I,longfront,longall:integer;
str1,dstr:string;
const frontdot='佰拾亿仟佰拾万仟佰拾元';//这里可以由你加多几位
backdot='角分厘毫姑婶婆';//也可以加
begin
longfront:=length(inttostr(trunc(xiao)));
//取得小数点前数字长度
dstr:=copy(frontdot,length(frontdot)-longfront*2+1,longfront*2)+backdot;//取得总金额对应单位
str1:=floattostr(xiao);
Delete(str1,longfront+1,1);//删除小数点
longall:=length(str1);
for i:=1 to longalldo
case strtoint(str1) of
0:result:=result+'零'+copy(dstr,i*2-1,2);
1:result:=result+'壹'+copy(dstr,i*2-1,2);
2:result:=result+'贰'+copy(dstr,i*2-1,2);
3:result:=result+'叁'+copy(dstr,i*2-1,2);
4:result:=result+'肆'+copy(dstr,i*2-1,2);
5:result:=result+'伍'+copy(dstr,i*2-1,2);
6:result:=result+'陆'+copy(dstr,i*2-1,2);
7:result:=result+'柒'+copy(dstr,i*2-1,2);
8:result:=result+'捌'+copy(dstr,i*2-1,2);
9:result:=result+'玖'+copy(dstr,i*2-1,2);
end;

end;
//from okhai
 
来迟了,不然这分就归我了,看来要勤上DFW一点才行
 
后退
顶部