求大写转小写函数 ( 积分: 100 )

  • 主题发起人 主题发起人 shirely.hu
  • 开始时间 开始时间
S

shirely.hu

Unregistered / Unconfirmed
GUEST, unregistred user!
高分悬赏求将大写转换为小写的函数,如将一万或壹万转换为10000
 
小写转大写容易,大写转小写困难
 
循环大写。把万千百拾等先去除其他的根据中文替换如“壹”换1
 
楼上的没有这么简单,例如壹万零壹拾元,要考虑到这类问题的.
 
有这样的函数吗?
 
不难,就是有点拖沓
 
就直接“万”就是10000 “千”就是1000
数值就是数字
最后 数字*万(等等)+数字*。。。。。。。。。。。。
 
{用Delphi编写人民币大小写转换程序 本文是大写==>>小写 要小写==>>大写请跟我联系!
在财务管理系统中,有时需要打印大写人民币数字,于是笔者编写了以下一些函数使这一需要得以满足,现介绍如下:
注:copy(2005-Jey-QQ:344430663)本程序在Delphi7、Winwin2000下调试通过。}
function TForm1.shuzi(jey: string):string ;
var
i:integer;
s,s1,s2:integer;
ab:integer;
a,b,s3,s4:string;
begin
i:=1; ab:=0; a:=''; b:='';s:=0;s1:=0;s2:=0;s3:='0';s4:='0';
while i<=length(jey) do
begin
ab:=strtoint(shuzi1(copy(jey,i,2)));
if ab=10000000 then
begin
b:=copy(jey,i+2,length(jey));
a:=copy(jey,1,i-1)+'元';
end;
i:=i+2;
end; //end-- while
if length(b)=0 then b:=jey;
i:=1;
while i<=length(b) do
begin
s1:=strtoint(shuzi1(copy(b,i,2)));
if s1 in [0..9] then
begin
s:=s1;
end
else
begin
s:=s1*s;
s3:=inttostr((s)+strtoint(s3));
s:=0;
end;
i:=i+2;
end; //end-- while

i:=1;s:=0;s1:=0;s2:=0;
while i<=length(a) do
begin
s1:=strtoint(shuzi1(copy(a,i,2)));
if s1 in [0..9] then
begin
s:=s1;
end
else
begin
s:=s1*s;
s4:=inttostr((s)+strtoint(s4));
s:=0;
end;
i:=i+2;
end; //end-- while

if length(s4)>1 then
result:=inttostr(strtoint(copy(s4,1,length(s4)-3))*10000+(strtoint(s3)div 1000))
else
result:=inttostr(strtoint(s3)div 1000);
if strtoint(copy(s3,length(s3)-1,1))<>0 then
result:=result+'.'+copy(s3,length(s3)-2,2)
else if strtoint(copy(s3,length(s3)-2,1))<>0 then
result:=result+'.'+copy(s3,length(s3)-2,1);

end; //end-- begin

function TForm1.shuzi1(jey: string):string;
var
i:integer;
s:integer;
s1:string;
shu1:array of string[2];
begin
s1:='168';
i:=0;
SetLength(shu1,17);
shu1[16]:='万';shu1[15]:='仟';
shu1[14]:='佰'; shu1[13]:='拾'; shu1[12]:='元';shu1[11]:='角';shu1[10]:='分';
SHU1[0]:='零';SHU1[1]:='壹';SHU1[2]:='贰';SHU1[3]:='叁';SHU1[4]:='肆';
SHU1[5]:='伍';SHU1[6]:='陆';SHU1[7]:='柒';SHU1[8]:='捌';SHU1[9]:='玖';
for i:=0 to 16 do
begin
if jey<>shu1 then continue;
s:=i;
break;
end;
case s of
0:s1:='0';
1:s1:='1';
2:s1:='2';
3:s1:='3';
4:s1:='4';
5:s1:='5';
6:s1:='6';
7:s1:='7';
8:s1:='8';
9:s1:='9';
10:s1:='10';
11:s1:='100';
12:s1:='1000';
13:s1:='10000';
14:s1:='100000';
15:s1:='1000000';
16:s1:='10000000';
end;
result:=s1;
end;
 
好象不大好用.....
 
我晕啊 前两天算大写转小写就给我算蒙了 竟然还有这么算的??
提个思路 大家看看成不成!!

比如说是 叁千陆佰柒拾捌兆零伍元

在字符串中先查询兆这个字 当查找到的时候 把它之前的都截取出来 这样他就变成了'叁千陆佰柒拾捌兆' 然后再细查 叁千就是 3000 再查到陆佰 就再把 600 加到 3000上 这样把他都算完后 再把兆的位数乘上 就是 3678 * 10的14次方 然后再找亿位上的 按以前的办法 把亿位的数和兆位的数 相加 最后一直加到元位

大家考虑看看 这个办法行不行的通??
 
后退
顶部