把数字小写转换成大写
方法一,使用系统提供的函数,但是不满足大陆财务的要求。
方法二:使用下面的函数。
英文:
static str Num2EngStr(real realNum,boolean showNegative=false)
{
str aa,bb,T1,T2,T3,B,W,CC,a1;
int a2,a=0,c=0;
int V,M;
real tmpReal;
boolean IsNegative=false;
;
aa='ONE'+strRep(' ',9-strLen('ONE'))+'TWO'+strRep(' ',9-strLen('TWO'))+
'THREE'+strRep(' ',9-strLen('THREE'))+'FOUR'+strRep(' ',9-strLen('FOUR'))+
'FIVE'+strRep(' ',9-strLen('FIVE'))+'SIX'+strRep(' ',9-strLen('SIX'))+
'SEVEN'+strRep(' ',9-strLen('SEVEN'))+'EIGHT'+strRep(' ',9-strLen('EIGHT'))+
'NINE'+strRep(' ',9-strLen('NINE'))+'TEN'+strRep(' ',9-strLen('TEN'))+
'ELEVEN'+strRep(' ',9-strLen('ELEVEN'))+'TWELVE'+strRep(' ',9-strLen('TWELVE'))+
'THIRTEEN'+strRep(' ',9-strLen('THIRTEEN'))+'FOURTEEN'+strRep(' ',9-strLen('FOURTEEN'))+
'FIFTEEN'+strRep(' ',9-strLen('FIFTEEN'))+'SIXTEEN'+strRep(' ',9-strLen('SIXTEEN'))+
'SEVENTEEN'+strRep(' ',9-strLen('SEVENTEEN'))+'EIGHTEEN'+strRep(' ',9-strLen('EIGHTEEN'))+
'NINETEEN'+strRep(' ',9-strLen('NINETEEN'));
bb="TWENTY THIRTY FORTY FIFTY SIXTY SEVENTYEIGHTY NINETY ";
if (realNum==0)
return 'ZERO ONLY.';
if (realNum<0)
{
realNum=abs(realNum);
IsNegative=true;
}
tmpReal=decRound(realNum,2);
T1=strLtrim(num2str(tmpReal,20,2,1,0));
T2='';
T3=T1;
if (strFind(T3,'.',1,20)!=0)
{
V=strFind(T3,'.',1,20);
T1=subStr(T3,1,V-1);
T2=subStr(T3,V+1,strLen(T3)-V);
}
T1=strRep(' ',10 - strLen(T1))+T1;
CC=T1;
B='';
W='';
M=9;
while (m >0)
{
if (subStr(cc,m+1,1)==' ')
break;
if (str2num(subStr(cc,m - 1,3))!=0)
{
if (m==6)
W=' THOUSAND '+w;
else if (m==3)
W=' MILLION '+w;
A=str2Num(subStr(cc,m,2));
if (a !=0)
{
if (a< 20)
B=strRtrim(subStr(aa,(a - 1)*9+1,9));
else
{
A1=strLtrim(num2str(a,20,0,1,0));
A2=str2Num(subStr(a1,1,1));
b=strRtrim(subStr(bb,(a2 - 2)*7+1,7));
a2=str2num(subStr(a1,2,1));
if (a2!=0)
B=strRtrim(b+'-'+subStr(aa,(a2 - 1)*9+1,9));
}
w=b+w;
}
A=str2num(subStr(cc,m - 1,1));
if (a!=0)
{
b=strRtrim(substr(aa,(a - 1)*9+1,9))+' HUNDRED ';
if (w!=' ' && m==9)
b=b+'AND ';
w=b+w;
}
}
m=m - 3;
}
if (w==' ')
w='ZERO';
if (t2!=' ' && t2!='00')
w=strRtrim(strLtrim(w))+' '+t2+'/100';
if (substr(w,strLen(w)-11,12)=='HUNDRED AND ')
w=substr(w,1,strLen(w)-5);
if(isNegative&&showNegative)
return 'NEGATIVE '+w+' ONLY.';
else
return w+' ONLY.';
}
简体中文:
static str Num2ChnStr(real realNum)
{
real y;
int b,a;
str je,x,hz1,hz2,e,h,f,m;
boolean IsNegative=false;
if (realNum==0)
return '零园';
if (realNum<0)
{
realNum=abs(realNum);
IsNegative=true;
}
y=realNum;
x=strLtrim(strRtrim(num2str(y,20,2,1,0)));
b=strLen(x)-3;
a=1;
e=substr(x,a,1);
hz2='零壹贰叁肆伍陆柒捌玖';
hz1='仟佰拾亿仟佰拾万仟佰拾园';
je='';
while (e!='.')
{
h=subStr(hz2,str2num(e)*2+1,2);
f=subStr(hz1,24-(b-a)*2-1,2);
if (e!='0' || (e=='0' && (f=='亿' || f=='万' || f=='园')))
je=strLtrim(strRtrim(je))+h+f;
else
je=strLtrim(strRtrim(je))+h;
a=a+1;
e=subStr(x,a,1);
}
a=a+1;
e=subStr(x,a,1);
h=subStr(x,a+1,1);
if (e=='0' && h=='0')
je=je+'整';
else
{
if (e=='0')
je=je+'零'+subStr(hz2,str2num(h)*2+1,2)+'分';
else if (h=='0')
je=je+substr(hz2,str2num(e)*2+1,2)+'角整';
else
je=je+substr(hz2,str2num(e)*2+1,2)+'角'+subStr(hz2,str2num(h)*2+1,2)+'分';
}
b=strLen(je);
a=1;
while (a<b)
{
m=substr(je,a,4);
if (m=='零园' || m=='零万' || m=='零亿' || m=='零零')
{
je=subStr(je,1,a-1)+strLtrim(strRtrim(substr(je,a+2,40)));
a=a-2;
b=b-2;
}
a=a+2;
}
if (subStr(je,1,2)=='园' && strLen(je)>2)
je=subStr(je,3,strLen(je)-2);
if (IsNegative)
je='负'+je;
return je;
}
方法一,使用系统提供的函数,但是不满足大陆财务的要求。
方法二:使用下面的函数。
英文:
static str Num2EngStr(real realNum,boolean showNegative=false)
{
str aa,bb,T1,T2,T3,B,W,CC,a1;
int a2,a=0,c=0;
int V,M;
real tmpReal;
boolean IsNegative=false;
;
aa='ONE'+strRep(' ',9-strLen('ONE'))+'TWO'+strRep(' ',9-strLen('TWO'))+
'THREE'+strRep(' ',9-strLen('THREE'))+'FOUR'+strRep(' ',9-strLen('FOUR'))+
'FIVE'+strRep(' ',9-strLen('FIVE'))+'SIX'+strRep(' ',9-strLen('SIX'))+
'SEVEN'+strRep(' ',9-strLen('SEVEN'))+'EIGHT'+strRep(' ',9-strLen('EIGHT'))+
'NINE'+strRep(' ',9-strLen('NINE'))+'TEN'+strRep(' ',9-strLen('TEN'))+
'ELEVEN'+strRep(' ',9-strLen('ELEVEN'))+'TWELVE'+strRep(' ',9-strLen('TWELVE'))+
'THIRTEEN'+strRep(' ',9-strLen('THIRTEEN'))+'FOURTEEN'+strRep(' ',9-strLen('FOURTEEN'))+
'FIFTEEN'+strRep(' ',9-strLen('FIFTEEN'))+'SIXTEEN'+strRep(' ',9-strLen('SIXTEEN'))+
'SEVENTEEN'+strRep(' ',9-strLen('SEVENTEEN'))+'EIGHTEEN'+strRep(' ',9-strLen('EIGHTEEN'))+
'NINETEEN'+strRep(' ',9-strLen('NINETEEN'));
bb="TWENTY THIRTY FORTY FIFTY SIXTY SEVENTYEIGHTY NINETY ";
if (realNum==0)
return 'ZERO ONLY.';
if (realNum<0)
{
realNum=abs(realNum);
IsNegative=true;
}
tmpReal=decRound(realNum,2);
T1=strLtrim(num2str(tmpReal,20,2,1,0));
T2='';
T3=T1;
if (strFind(T3,'.',1,20)!=0)
{
V=strFind(T3,'.',1,20);
T1=subStr(T3,1,V-1);
T2=subStr(T3,V+1,strLen(T3)-V);
}
T1=strRep(' ',10 - strLen(T1))+T1;
CC=T1;
B='';
W='';
M=9;
while (m >0)
{
if (subStr(cc,m+1,1)==' ')
break;
if (str2num(subStr(cc,m - 1,3))!=0)
{
if (m==6)
W=' THOUSAND '+w;
else if (m==3)
W=' MILLION '+w;
A=str2Num(subStr(cc,m,2));
if (a !=0)
{
if (a< 20)
B=strRtrim(subStr(aa,(a - 1)*9+1,9));
else
{
A1=strLtrim(num2str(a,20,0,1,0));
A2=str2Num(subStr(a1,1,1));
b=strRtrim(subStr(bb,(a2 - 2)*7+1,7));
a2=str2num(subStr(a1,2,1));
if (a2!=0)
B=strRtrim(b+'-'+subStr(aa,(a2 - 1)*9+1,9));
}
w=b+w;
}
A=str2num(subStr(cc,m - 1,1));
if (a!=0)
{
b=strRtrim(substr(aa,(a - 1)*9+1,9))+' HUNDRED ';
if (w!=' ' && m==9)
b=b+'AND ';
w=b+w;
}
}
m=m - 3;
}
if (w==' ')
w='ZERO';
if (t2!=' ' && t2!='00')
w=strRtrim(strLtrim(w))+' '+t2+'/100';
if (substr(w,strLen(w)-11,12)=='HUNDRED AND ')
w=substr(w,1,strLen(w)-5);
if(isNegative&&showNegative)
return 'NEGATIVE '+w+' ONLY.';
else
return w+' ONLY.';
}
简体中文:
static str Num2ChnStr(real realNum)
{
real y;
int b,a;
str je,x,hz1,hz2,e,h,f,m;
boolean IsNegative=false;
if (realNum==0)
return '零园';
if (realNum<0)
{
realNum=abs(realNum);
IsNegative=true;
}
y=realNum;
x=strLtrim(strRtrim(num2str(y,20,2,1,0)));
b=strLen(x)-3;
a=1;
e=substr(x,a,1);
hz2='零壹贰叁肆伍陆柒捌玖';
hz1='仟佰拾亿仟佰拾万仟佰拾园';
je='';
while (e!='.')
{
h=subStr(hz2,str2num(e)*2+1,2);
f=subStr(hz1,24-(b-a)*2-1,2);
if (e!='0' || (e=='0' && (f=='亿' || f=='万' || f=='园')))
je=strLtrim(strRtrim(je))+h+f;
else
je=strLtrim(strRtrim(je))+h;
a=a+1;
e=subStr(x,a,1);
}
a=a+1;
e=subStr(x,a,1);
h=subStr(x,a+1,1);
if (e=='0' && h=='0')
je=je+'整';
else
{
if (e=='0')
je=je+'零'+subStr(hz2,str2num(h)*2+1,2)+'分';
else if (h=='0')
je=je+substr(hz2,str2num(e)*2+1,2)+'角整';
else
je=je+substr(hz2,str2num(e)*2+1,2)+'角'+subStr(hz2,str2num(h)*2+1,2)+'分';
}
b=strLen(je);
a=1;
while (a<b)
{
m=substr(je,a,4);
if (m=='零园' || m=='零万' || m=='零亿' || m=='零零')
{
je=subStr(je,1,a-1)+strLtrim(strRtrim(substr(je,a+2,40)));
a=a-2;
b=b-2;
}
a=a+2;
}
if (subStr(je,1,2)=='园' && strLen(je)>2)
je=subStr(je,3,strLen(je)-2);
if (IsNegative)
je='负'+je;
return je;
}