小写金额转成大写算法

发表于:2007-07-14来源:作者:点击数: 标签:
小写金额转成大写算法 写了几天了,最终转的还是有问题.请高手帖出算法或代码. --------------------------------------------------------------- 我用C++写过一个,代码不在身边. 不过可以提示一下,将金额4位一分,比如1234567可以拆分为1234和567.另外,数字
小写金额转成大写算法

写了几天了,最终转的还是有问题.请高手帖出算法或代码.
---------------------------------------------------------------

我用C++写过一个,代码不在身边.
不过可以提示一下,将金额4位一分,比如1234567可以拆分为1234和567.另外,数字中间有零的话必须写零,但要注意多个零的情况.详细的怎么写你可以问问做财务的人.
---------------------------------------------------------------

我以前写过
说一下思路
先把数字分成整数小数
假如整数100909应该是十万零九百零九
有数组
一个:零,一,二,三,四,五,六,七,八,九
一个:元,角,分,厘
一个:元,十,百,千,万,十,百,千,亿
然后依次去取就可以了
100909
上面会拼出
一十零零九百零九元
你碰到万位补万,两个零变成一个


---------------------------------------------------------------

有个比较笨点的:
判断每个字符,然后条件if(c.equals("1")){.....}
依此类推。。。。


---------------------------------------------------------------

http://www.csdn.net/Develop/Read_Article.asp?Id=15823
---------------------------------------------------------------

从CSDN上整理出五个方案,请参考:

1、(JAVA)
public static String numtochinese(String input){
String s1="零壹贰叁肆伍陆柒捌玖";
String s4="分角整元拾佰仟万拾佰仟亿拾佰仟";
String temp="";
String result="";
if (input==null) return "输入字串不是数字串只能包括以下字符(´0´~´9´,´.´),输入字串最大只能精确到仟亿,小数点只能两位!";
temp=input.trim();
float f;
try{
f=Float.parseFloat(temp);

}catch(Exception e){return "输入字串不是数字串只能包括以下字符(´0´~´9´,´.´),输入字串最大只能精确到仟亿,小数点只能两位!";}
int len=0;
if (temp.indexOf(".")==-1) len=temp.length();
else len=temp.indexOf(".");
if(len>s4.length()-3) return("输入字串最大只能精确到仟亿,小数点只能两位!");
int n1,n2=0;
String num="";
String unit="";

for(int i=0;i<temp.length();i++){
if(i>len+2){break;}
if(i==len) {continue;}
n1=Integer.parseInt(String.valueOf(temp.charAt(i)));
num=s1.substring(n1,n1+1);
n1=len-i+2;
unit=s4.substring(n1,n1+1);
result=result.concat(num).concat(unit);
}
if ((len==temp.length()) &brvbar; ¦(len==temp.length()-1)) result=result.concat("整");
if (len==temp.length()-2) result=result.concat("零分");
return result;
}


2、(JSP)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>转换大写金额</title>
<STYLE type=text/css>
INPUT { BORDER-RIGHT: #c0d3dc 1px solid; BORDER-TOP: #c0d3dc 1px solid; BORDER-LEFT: #c0d3dc 1px solid; BORDER-BOTTOM: #c0d3dc 1px solid; font-family: verdana; HEIGHT: 19px}
BODY {font-family:arial,helvetica,Tahoma; font-size: 9pt; color:´094A82´}
</STYLE>
<bgsound id=bgsoundone src="" loop=1>
</head>
<body>
<SCRIPT LANGUAGE="VBScript">
dim hj,hji
sub document_onkeypress()
if window.event.srcelement.id="num" and window.event.keycode="13" then
call retu_cn()
end if
end sub
sub window_onload()
document.fmSubmit.t1.focus()
end sub
SUB retu_cn()
dim n,m_hj,s,ch,ch2,ch3,num
num=Replace(trim(document.fmSubmit.t1.value),",","",1,-1,1)
if num="" then
MsgBox "您还没有输入金额!"
document.fmSubmit.t1.focus()
exit sub
End If
if IsNumeric(num)=False then
MsgBox "您输入的不是金额!"
document.fmSubmit.t1.focus()
exit sub
End If
n=FormatNumber(num,2,-1)
num=n
n=Replace(n,",","",1,-1,1)
If len(n)>15 Then
MsgBox "金额必须小于千亿!"
document.fmSubmit.t1.focus()
exit sub
End If
hj=space(0)
s="840"
ch="壹贰叁肆伍陆柒捌玖"
ch2="仟佰拾 "
ch3="亿万元"
for x=1 to 3
m=cstr(int(n/10^FormatNumber(mid(s,x,1),0,-1)))
m=space(4-len(m))+m
m_hj=space(0)
if m<>" 0" then
for y=1 to 4
if mid(m,y,1)<>space(1) and mid(m,y,1)<>"0" then
m_hj=trim(m_hj+mid(ch,FormatNumber(mid(m,y,1),0,-1),1)+mid(ch2,y,1))
else
if mid(m,y,1)=space(1) or mid(m,y,1)="0" then
m_hj=m_hj
if right(m_hj,1)="零" then
m_hj=m_hj+space(0)
else
m_hj=m_hj+"零"
end if
else
m_hj=m_hj
end if
end if
next
if right(m_hj,1)="零" then
m_hj=mid(m_hj,1,len(m_hj)-1)+mid(ch3,x,1)
if x=3 then
m_hj=m_hj+space(0)
else
m_hj=m_hj+"零"
end if
else
m_hj=m_hj+mid(ch3,x,1)
end if
if right(hj,1)="零" and mid(m_hj,1,1)="零" then
hj=hj+mid(m_hj,2,len(m_hj)-1)
else
hj=hj+m_hj
end if
else
if x=3 then
if right(hj,1)="零" then
if trim(hj)="零" then
hj=hj+space(0)
else
hj=mid(hj,1,len(hj)-1)+"元"
end if
else
if trim(hj)="零" then
hj=hj+space(0)
else
hj=hj+"元"
end if
end if
else
if right(hj,1)="零" then
hj=hj+space(0)
else
hj=hj+"零"
end if
end if
end if
if n-int(n)=0 then
n=n-int(FormatNumber(m,0,-1))*10^int(FormatNumber(mid(s,x,1),0,-1))
else
tt=FormatNumber("0."+mid(cstr(n),Instr(1,n,".")+1,2),2)
n=int(n)
n=n-int(FormatNumber(m,0,-1))*10^int(FormatNumber(mid(s,x,1),0,-1))
n=n+tt
end if
next
m=mid(cstr(n),2,2)
if trim(len(m))<>2 then
m=m+"0"
end if
if n*100=0 then
if left(hj,1)="零" then
if right(hj,1)="零" then
hj=hj+"元整"
else
hj=mid(hj,2,len(hj)-1)+"整"
end if
else
if right(hj,1)="零" then
hj=mid(hj,1,len(hj)-1)+"整"
else
hj=hj+"整"
end if
end if
else
if right(hj,1)="零" then
hj=mid(hj,1,len(hj)-1)
else
hj=hj
end if
if mid(m,1,1)="0" or mid(m,1,1)=space(1) then
hj=hj+"零"
else
hj=hj+mid(ch,FormatNumber(mid(m,1,1),0,-1),1)+"角"
end if
if mid(hj,1,1)="零" then
hj=mid(hj,2,len(hj)-1)
else
hj=hj
end if
if mid(m,2,1)="0" then
hj=hj+"整"
else
hj=hj+mid(ch,FormatNumber(mid(m,2,1),0,-1),1)+"分"
end if
end if
if num=".00" then
document.fmSubmit.t1.value="0.00"
else
document.fmSubmit.t1.value=num
end if
document.fmSubmit.t2.value=""
hji=1
call read()
End Sub
SUB read()
MyVar=mid(hj,hji,1)
document.fmSubmit.t2.value=document.fmSubmit.t2.value+MyVar
Select Case MyVar
Case "零" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/0.wav"
Case "壹" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/1.wav"
Case "贰" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/2.wav"
Case "叁" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/3.wav"
Case "肆" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/4.wav"
Case "伍" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/5.wav"
Case "陆" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/6.wav"
Case "柒" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/7.wav"
Case "捌" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/8.wav"
Case "玖" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/9.wav"
Case "拾" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/10.wav"
Case "佰" document.all("bgsoundone").src="http://go.163.com/yjsj/wav/b.wav"
Case "仟" document.all("bgsoundone").src

原文转自:http://www.ltesting.net