摘录的
小写金额转换 如下为一个简单的小写金额转换为大写的函数,其思路简单(可以说烂吧,居然利用了位置来转换),但是它几乎可以无限制的转换,只要你能读得出来和写得进去:function Tform1.SmallTOBig(small:real):string;var SmallMonth,BigMonth:string;wei1,qianwei1:string[2];wei,qianwei,dianweizhi,qian:integer;begin{------- 修改参数令值更精确 -------}qianwei:=-2;{小数点后的位置,需要的话也可以改动-2值}Smallmonth:=formatfloat('0.00',small);{转换成货币形式,需要的话小数点后加多几个零}{---------------------------------}dianweizhi :=pos('.',Smallmonth);{小数点的位置}for qian:=length(Smallmonth) downto 1 do{循环小写货币的每一位,从小写的右边位置到左边}beginif qian<>dianweizhi then{如果读到的不是小数点就继续}begincase 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;case qianwei of{判断大写位置,可以继续增大到real类型的最大值}-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);"他自动默认小数点后两位
小写金额转换 如下为一个简单的小写金额转换为大写的函数,其思路简单(可以说烂吧,居然利用了位置来转换),但是它几乎可以无限制的转换,只要你能读得出来和写得进去:function Tform1.SmallTOBig(small:real):string;var SmallMonth,BigMonth:string;wei1,qianwei1:string[2];wei,qianwei,dianweizhi,qian:integer;begin{------- 修改参数令值更精确 -------}qianwei:=-2;{小数点后的位置,需要的话也可以改动-2值}Smallmonth:=formatfloat('0.00',small);{转换成货币形式,需要的话小数点后加多几个零}{---------------------------------}dianweizhi :=pos('.',Smallmonth);{小数点的位置}for qian:=length(Smallmonth) downto 1 do{循环小写货币的每一位,从小写的右边位置到左边}beginif qian<>dianweizhi then{如果读到的不是小数点就继续}begincase 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;case qianwei of{判断大写位置,可以继续增大到real类型的最大值}-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);"他自动默认小数点后两位
解决方案 »
- delphi 怎么实现建立recoder数据的动态list
- 用DBGridEh1作为数据录入方式,想输入某列时,自动带出其他列数据
- Delphi作POS小票打印用什么比较好?
- 不好意思的问题,麻烦大家了!
- Delphi7编译后的代码是本地代码还是中间代码??
- 如何设计一个实现类似于VISIO的画图功能的程序,我想到了用设计模式,大家有何好的建议都有分。
- 简单地都不好问的问题,可是学习总是无罪,请教无过!帮帮我!好吗?
- 继续求解:删除文件夹下的所有文件和子文件夹的函数,请多多支持
- 谁用过《财智家庭理财软件》这里面很多东东不知如何实现?是用delphi做的!
- 有没有将QuickReport报表导出到Excel的控件?
- 如何定制这个异常...
- 请问.dcu类型的文件是如何使用的?
var
daxie,danwei,minuscurs:string;
i,j,deccount :integer ;
rmb :int64;
begin
curs:=trim(curs);
if (curs='-') or (curs='.') or (curs='') then // '.','-',''错
begin
result:='ERROR';
exit;
end;
deccount :=0;
for i:=1 to length(curs) do
begin
if not (curs[i] in ['0'..'9','.','-']) then //'123w2'错
begin
result:='ERROR';
exit;
end;
if (curs[i]='.') and (deccount>0) then //'12313.324.23'错
begin
result:='ERROR';
exit;
end;
if (curs[i]='-') and (i>1) then //'-123-123'错
begin
result:='ERROR';
exit;
end;
if curs[i]='.' then inc(deccount);
end;
rmb:=round(StrToFloat(curs)*100);
minuscurs:=''; //负数标志
if rmb<0 then
begin
minuscurs:='(负数)' ;
rmb:=(-1)*rmb;
end;
if rmb>=1E18 then //超过9千万亿
begin
result:='ERROR';
exit;
end;
curs:='';
i:=0; j:=0 ;
while rmb>0 do
begin
j:= rmb mod 10;
case j of
0 : daxie :='零' ;
1 : daxie :='壹' ;
2 : daxie :='贰' ;
3 : daxie :='叁' ;
4 : daxie :='肆' ;
5 : daxie :='伍' ;
6 : daxie :='陆' ;
7 : daxie :='柒' ;
8 : daxie :='捌' ;
9 : daxie :='玖' ;
end;
case i of
0 : danwei :='分' ;
1 : danwei :='角' ;
2 : danwei :='圆' ;
3 : danwei :='拾' ;
4 : danwei :='佰' ;
5 : danwei :='仟' ;
6 : danwei :='万' ;
7 : danwei :='拾' ;
8 : danwei :='佰' ;
9 : danwei :='仟' ;
10 : danwei :='亿' ;
11 : danwei :='拾' ;
12 : danwei :='佰' ;
13 : danwei :='仟' ;
14 : danwei :='万' ;
15 : danwei :='拾' ;
16 : danwei :='佰' ;
17 : danwei :='仟' ;
end;
rmb:=rmb div 10;
if j<>0 then curs:=daxie+danwei+curs; //该位上不为0
if (j=0) and (not (i in [2,6,10,14])) then //该位为0,是一般位
curs:=daxie+curs;
if (j=0) and (i in [2,6,10,14]) then //该位为0,是敏感位
curs:=danwei+curs;
inc(i);
end;
while pos('零零',curs)>0 do curs:=stringreplace(curs,'零零','零',[]);
curs:=stringreplace(curs,'零圆','圆',[]);
while pos('零万',curs)>0 do curs:=stringreplace(curs,'零万','万',[]); //上万亿后可能两个'零万'
curs:=stringreplace(curs,'零亿','亿',[]);
curs:=stringreplace(curs,'角零','角',[]);
if copy(curs,length(curs)-3,4)='圆零' then //最后两位是圆零.
curs:=stringreplace(curs,'圆零','圆整',[]); //小数点后
curs:=stringreplace(curs,'亿万','亿',[]);
if curs='' then curs:='零圆整';
result:=minuscurs+curs;
end;
BEGIN
result:= chr(ord(lchar)-32);
end