能不能改成不用“元、角、分”呀?看下面的function:
Function Tform1.NtoC( n0 :real) :String;
Function IIF( b :boolean; s1,s2 :string) :string;
begin
if b then IIF:= s1 else IIF:=s2;
end; //本函数的功能一目了然: 当b为真时返回s1,否则返回s2
Const c= '零壹贰叁肆伍陆柒捌玖◇分角圆拾佰仟万拾佰仟亿拾佰仟万';
var L,i,n :integer; Z :boolean; s,s1,s2 :string;
begin
s:= FormatFloat( '0.00', ABS(n0));
L:= Length( s);
Z:= n0<1;
For i:= 1 To L-3 do
begin
n:= StrToInt( s[ L-i-2]);
s1:=IIf((n=0)And(Z Or (i=9) Or (i=5) Or (i=1)), '', Copy( c, n*2+1, 2))
+ IIf((n=0)And((i<>9)And(i<>5)And(i<>1) Or Z And(i=1)),'',Copy(c,(i+13)*2-1,2))
+ s1;
Z:= (n=0);
end;
Z:= False;
For i:= 1 To 2 do
begin
n:= StrToInt( s[ L-i+1]);
s2:= IIf((n=0)And((i=1) Or (i=2)And(Z Or (n0<1))), '', Copy( c, n*2+1, 2))
+ IIf( (n>0), Copy( c,(i+11)*2-1, 2), IIf( (i=2) Or Z, '','整'))
+ s2;
Z:= (n=0);
end;
For i:= 1 To Length( s1) do If Copy(s1, i, 4) = '亿万' Then Delete(s1,i+2,2);
NtoC:= IIf(n0=0, '零', IIF(n0<0, '-','')+ s1+s2);
End;每次调用时都会有多少元多少角多少分,能不能去掉元角分呀?我调用后产生的字串不要元角分,要这样的:"参拾贰点伍捌”,多了一个“点”,
多谢!
Function Tform1.NtoC( n0 :real) :String;
Function IIF( b :boolean; s1,s2 :string) :string;
begin
if b then IIF:= s1 else IIF:=s2;
end; //本函数的功能一目了然: 当b为真时返回s1,否则返回s2
Const c= '零壹贰叁肆伍陆柒捌玖◇分角圆拾佰仟万拾佰仟亿拾佰仟万';
var L,i,n :integer; Z :boolean; s,s1,s2 :string;
begin
s:= FormatFloat( '0.00', ABS(n0));
L:= Length( s);
Z:= n0<1;
For i:= 1 To L-3 do
begin
n:= StrToInt( s[ L-i-2]);
s1:=IIf((n=0)And(Z Or (i=9) Or (i=5) Or (i=1)), '', Copy( c, n*2+1, 2))
+ IIf((n=0)And((i<>9)And(i<>5)And(i<>1) Or Z And(i=1)),'',Copy(c,(i+13)*2-1,2))
+ s1;
Z:= (n=0);
end;
Z:= False;
For i:= 1 To 2 do
begin
n:= StrToInt( s[ L-i+1]);
s2:= IIf((n=0)And((i=1) Or (i=2)And(Z Or (n0<1))), '', Copy( c, n*2+1, 2))
+ IIf( (n>0), Copy( c,(i+11)*2-1, 2), IIf( (i=2) Or Z, '','整'))
+ s2;
Z:= (n=0);
end;
For i:= 1 To Length( s1) do If Copy(s1, i, 4) = '亿万' Then Delete(s1,i+2,2);
NtoC:= IIf(n0=0, '零', IIF(n0<0, '-','')+ s1+s2);
End;每次调用时都会有多少元多少角多少分,能不能去掉元角分呀?我调用后产生的字串不要元角分,要这样的:"参拾贰点伍捌”,多了一个“点”,
多谢!
解决方案 »
- 大家有没发现TWebbrower的一个BUG?
- 1分钟精通所有编程(现在就指望这个吃饭了,一般人我不告诉他)
- mysql与express连接时,在windowsxp中正常,但在windows200 profressional中出现问题
- 如何通过句柄访问控件对象实例?
- 键盘响应一问
- 居然会出现公用变量不能共用的现象?有人懂吗?
- 求介绍ADO控件的资料
- 文件 保存问题
- About FlashForm
- delphi控制台程序中(即运行于DOS窗口),如何编写定时代码?如控制公路上十字路口的红绿灯,让代码来控制红灯与绿灯,每隔一段时间让红绿灯交替一明一暗???请高手指点,30分相送
- csdn烟台的兄弟请注意一下 我在此谢过了 散分~~
- 菜鸟求教:如何在窗体中建立超链接?
你把 Z:= False;后面的i:0 to 2的循环砍了不就结了?
Function NtoC( n0 :real) :String;
Function IIF( b :boolean; s1,s2 :string) :string;
begin
if b then IIF:= s1 else IIF:=s2;
end; //本函数的功能一目了然: 当b为真时返回s1,否则返回s2
Const c= '零壹贰叁肆伍陆柒捌玖点拾佰仟万拾佰仟亿拾佰仟万';
var L,i,n :integer; Z :boolean; s,s1,s2 :string;
begin
s:= FormatFloat( '0.00', ABS(n0));
L:= Length( s);
Z:= n0<1;
For i:= 1 To L-3 do
begin
n:= StrToInt( s[ L-i-2]);
s1:=IIf((n=0)And(Z Or (i=9) Or (i=5) Or (i=1)), '', Copy( c, n*2+1, 2))
+ IIf((n=0)And((i<>9)And(i<>5)And(i<>1) Or Z And(i=1)),'',Copy(c,(i+10)*2-1,2))
+ s1;
Z:= (n=0);
end;
if Length(s1)=0 then s1 := '零点' ;
Z:= False;
For i:= 1 To 2 do
begin
n:= StrToInt( s[ L-i+1]);
s2:= IIf((n=0)And((i=1) Or (i=2)And(Z Or (n0<1))), '', Copy( c, n*2+1, 2)) + s2;
Z:= (n=0);
end;
if Length(s2)=0 then s1 := LeftStr(s1,Length(s1)-1);
For i:= 1 To Length( s1) do If Copy(s1, i, 4) = '亿万' Then Delete(s1,i+2,2);
NtoC:= IIf(n0=0, '零', IIF(n0<0, '-','')+ s1+s2);
End;