小写金额转成大写算法
写了几天了,最终转的还是有问题.请高手帖出算法或代码. --------------------------------------------------------------- 我用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()) ¦ ¦(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
|
|