自己写一个函数了(s='123.00') 1、¥123.00 如果不是字符串,先将他转化为字符串; string M[5]={'元','拾','佰','仟','万','亿'} string N[2]={'零','角','份'} string HS,Hnum;2、根据字符串操作处理: len:=length(s); dot:=ansipos('.',s);//小数点位置 HS:=''; for i:=1 to len do begin num[i]:=copy(s,i,1);//分离数字 case num[i] of '1':Hnum:='壹'; '2':…… ……
if (dot>i) HS:=HS+Hnum+M[dot-i] else begin //这一段自己写吧; end; end;
wescom得很对 得按四个分组!
我作了一个DELPHI的此功能控件 如果需要和我联系
财务软件中总少不了大写的金额表示方式,如下为一个简单的小写金额转换为大写的函数,其思路简单(可以说烂吧,居然利用了位置来转换),但是它却几乎可以无限制的转换,只要你能读得出来和写得进去: function Tform1.SmallTOBig(small:real):string; var SmallMonth,BigMonth:string; wei1,qianwei1:string[2]; wei,qianwei,dianweizhi,qian:integer; begin {------- 修改参数令值更精确 -------} {小数点后的位数,需要的话也可以改动该值} 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)) of1: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);”他自动默认小数点后两位
用一个字符串,定义好亿千百拾万千百拾元角分,然后将数字按字符串处理,当然最好是先处理好整数,从个位数开始,使用 以下示意代码 strm:=''; i:=s2[1]+s2[2]+s2[3]+s2[4]+s2[5]; strq:='零壹贰叁肆伍陆柒捌玖拾'; strx:='拾万仟佰拾元角分'; for k:=1 to 8 do begin j:=i mod 10 ; // textout(intz[9-k],lh,copy(strq,j*2+1,2)); if i>0 then strm:=copy(strq,j*2+1,2)+copy(strx,(8-k)*2+1,2)+strm; i:=i div 10; end; textout(sp[7]-40,lh,formatfloat('####0.00',(s2[1]+s2[2]+s2[3]+s2[4]+s2[5])/100.0)); textout(sp[3],lh,strm); end; 以上是我做的程序中的一段源码
算法大致为:
例数:123456789.12
整数部分:从个位开始,每四位一组,即 1,2345,6789三组。 每组的单位从低到高单位为' ','万','亿'。
1亿,2345万, 6789 每组内部从低到高单位为:' ','拾','佰','仟'。
1,2仟3佰4拾5,6仟7佰8拾9 零的处理:
每组的内部,最低位为零的话(包括连续多个零)则删除该零,
如果是中间话,不论多少个零都缩为1个零。
例如: 10->1
1000->1
101->101
1001->101
100001->101
注意:以上变化时,要保持组内的单位不变,
小数部分:.12
由于是金额,小数部分一般只有两位,可以直接处理。
1、¥123.00 如果不是字符串,先将他转化为字符串;
string M[5]={'元','拾','佰','仟','万','亿'}
string N[2]={'零','角','份'}
string HS,Hnum;2、根据字符串操作处理:
len:=length(s);
dot:=ansipos('.',s);//小数点位置
HS:='';
for i:=1 to len do
begin
num[i]:=copy(s,i,1);//分离数字
case num[i] of
'1':Hnum:='壹';
'2':……
……
if (dot>i)
HS:=HS+Hnum+M[dot-i]
else
begin
//这一段自己写吧;
end;
end;
得按四个分组!
function Tform1.SmallTOBig(small:real):string;
var SmallMonth,BigMonth:string;
wei1,qianwei1:string[2];
wei,qianwei,dianweizhi,qian:integer;
begin
{------- 修改参数令值更精确 -------}
{小数点后的位数,需要的话也可以改动该值}
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)) of1: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);”他自动默认小数点后两位
i:=s2[1]+s2[2]+s2[3]+s2[4]+s2[5];
strq:='零壹贰叁肆伍陆柒捌玖拾';
strx:='拾万仟佰拾元角分';
for k:=1 to 8 do
begin
j:=i mod 10 ;
// textout(intz[9-k],lh,copy(strq,j*2+1,2));
if i>0 then
strm:=copy(strq,j*2+1,2)+copy(strx,(8-k)*2+1,2)+strm;
i:=i div 10;
end; textout(sp[7]-40,lh,formatfloat('####0.00',(s2[1]+s2[2]+s2[3]+s2[4]+s2[5])/100.0));
textout(sp[3],lh,strm);
end;
以上是我做的程序中的一段源码