posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          Java實(shí)現(xiàn)人民幣小寫轉(zhuǎn)大寫

          import java.io.*;
          import java.util.*;
          import java.lang.*;

          public class money
          {
          ? public money()
          ? {
          ? }

          public static String getChnmoney(String strNum){
          ?int n,m,k,i,j,q,p,r,s=0;
          ?int length,subLength,pstn;
          ?String change,output,subInput,input=strNum;
          ??????? output="";
          ??? if(strNum.equals(""))
          ?????? return null;
          ??? else
          ???? {
          ?length=input.length();
          ?pstn=input.indexOf('.'); //小數(shù)點(diǎn)的位置

          ?if(pstn==-1)
          ?{
          ?? subLength=length;//獲得小數(shù)點(diǎn)前的數(shù)字
          ?? subInput=input;
          ?}
          ??????? else
          ??{
          ?? subLength=pstn;
          ?? subInput=input.substring(0,subLength);
          ?}

          ?? char[] array=new char[4];
          ?? char[] array2={'仟','佰','拾'};
          ?? char[] array3={'億','萬','元','角','分'};

          ?? n=subLength/4;//以千為單位
          ?? m=subLength%4;

          ?? if(m!=0)
          ?? {
          ???? for(i=0;i<(4-m);i++)
          ?????? {
          ???????? subInput='0'+subInput;//補(bǔ)充首位的零以便處理
          ?????? }
          ??????????? n=n+1;
          ?? }
          ?? k=n;

          ?? for(i=0;i<n;i++)
          ?? {
          ???? p=0;
          ???? change=subInput.substring(4*i,4*(i+1));
          ???? array=change.toCharArray();//轉(zhuǎn)換成數(shù)組處理

          ???? for(j=0;j<4;j++)
          ???? {
          ????????????????? output+=formatC(array[j]);//轉(zhuǎn)換成中文
          ?????????? if(j<3)
          ?????????? {
          ????????????????????? output+=array2[j];//補(bǔ)進(jìn)單位,當(dāng)為零是不補(bǔ)(千百十)
          ?????????? }
          ?? ????????? p++;
          ???? }

          ????? if(p!=0)? output+=array3[3-k];//補(bǔ)進(jìn)進(jìn)制(億萬元分角)
          ??? //把多余的零去掉

          ???????????? String[] str={"零仟","零佰","零拾"};
          ???????????? for(s=0;s<3;s++)
          ???????????? {
          ??????????????? while(true)
          ???????????????? {
          ????????????????? q=output.indexOf(str[s]);
          ????????????????? if(q!=-1)
          ????????????????? output=output.substring(0,q)+"零"+output.substring(q+str[s].length());
          ????????????????? else
          ?????????????????? break;
          ????????????????? }
          ???????????? }
          ???????????? while(true)
          ????????????? {
          ?????????????? q=output.indexOf("零零");
          ?????????????? if(q!=-1)
          ????????????????? output=output.substring(0,q)+"零"+output.substring(q+2);
          ?????????????? else
          ?????????????????? break;
          ?????????????? }
          ????????????? String[] str1={"零億","零萬","零元"};
          ???????????? for(s=0;s<3;s++)
          ???????????? {
          ??????????????? while(true)
          ???????????????? {
          ????????????????? q=output.indexOf(str1[s]);
          ????????????????? if(q!=-1)
          ????????????????? output=output.substring(0,q)+output.substring(q+1);
          ????????????????? else
          ?????????????????? break;
          ????????????????? }
          ???????????? }
          ???????????? k--;
          ?????? ?? }

          ?? if(pstn!=-1)//小數(shù)部分處理
          ?? {
          ????? for(i=1;i<length-pstn;i++)
          ???? {
          ????????????? if(input.charAt(pstn+i)!='0')
          ?????????????? {
          ??????????????? output+=formatC(input.charAt(pstn+i));
          ???????? output+=array3[2+i];
          ??????????????? }
          ????????????? else if(i<2)
          ??????????????? output+="零";
          ????????????? else
          ??????????????? output+="";
          ???? }
          ?? }
          ???????????? if(output.substring(0,1).equals("零"))
          ????????????????? output=output.substring(1);
          ???????????? if(output.substring(output.length()-1,output.length()).equals("零"))
          ????????????????? output=output.substring(0,output.length()-1);
          ????????? return output+="整";
          ???????? }
          ??????? }

          ? public static String get3Eng(String strNum){
          ?String strEng= "";
          ?String str[] = {"","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE"};
          ?String str1[] = {"TEN","ELEVEN","TWELVE","THIRTEEN","FOURTEEN","FIFTEEN","SIXTEEN","SEVENTEEN","EIGHTEEN","NINETEEN"};
          ?String str2[] = {"TEN","TWENTY","THIRTY","FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY","HUNDRED"};
          ?int length = strNum.length();
          ?int num = Integer.parseInt(strNum);
          ?int b = num/100;
          ?int t = (num%100)/10;
          ?int g = (num%100)%10;
          ?if (b!=0){
          ??strEng = strEng + str[b] + " " + str2[9];
          ?}

          ?if (t==0){
          ??if(g!=0){
          ???if(b!=0){
          ????strEng = strEng + " AND ";
          ???}
          ???strEng = strEng? + str[g];
          ??}
          ?}else if (t==1){
          ???if(b!=0){
          ????strEng = strEng + " AND ";
          ??????????????????????????????? num=num%100;
          ???}
          ??strEng = strEng? +str1[num-10];
          ?}else if(t!=1){
          ??if (g!=0){
          ???if(b!=0){
          ????strEng = strEng + " AND ";
          ???}
          ???strEng = strEng? + str2[t-1] + "-" + str[g];
          ??}else{
          ???if(b!=0){
          ????strEng = strEng + " AND ";
          ???}
          ???strEng = strEng? + str2[t-1] + str[g];
          ??}
          ?}
          ?return strEng;
          ??? }

          public static String getCent(String strNum){
          ?String strEng= "";
          ?String str[] = {"","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE"};
          ?String str1[] = {"TEN","ELEVEN","TWELVE","THIRTEEN","FOURTEEN","FIFTEEN","SIXTEEN","SEVENTEEN","EIGHTEEN","NINETEEN"};
          ?String str2[] = {"TEN","TWENTY","THIRTY","FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY","HUNDRED"};
          ?String str3[] = {"CENTS","","DOLLARS","","HUNDRED","THOUSAND","","","MILLION","","","BILLION","",""};
          ??? if(strNum.equals(""))
          ?????? return null;
          ??? else
          ????? {
          ??????? int length = strNum.length();
          ?if (length!=3){
          ??return "輸入的位數(shù)錯(cuò)誤!";
          ?}
          ??int cent = Integer.parseInt(strNum.substring(1,3));
          ??if (cent==0){
          ???return strEng;
          ??}
          ??if (cent<10){
          ???strEng =str3[0]+" "+ strEng + str[cent] ;
          ??}else if (cent>=10&&cent<=19){
          ???strEng =str3[0]+" "+ strEng + str1[cent-10] ;
          ??}else if (cent>19){
          ???int jiao = cent/10;
          ???int fen = cent%10;
          ???if (fen!=0){
          ????strEng = str3[0]+" "+strEng + str2[jiao-1] + "-" +str[fen];
          ???}else{
          ????strEng = str3[0]+" "+strEng + str2[jiao-1] + str[fen];
          ???}
          ??}
          ?return strEng;
          ??? }
          }
          public static String getEngmoney(String strNum) {
          ?String strNumber="";
          ?String str3[] = {"CENTS","","DOLLARS","","HUNDRED","THOUSAND","","","MILLION","","","BILLION","",""};
          ?String strEng="";
          ?strNumber = strNum;
          ?int pointbz = strNumber.indexOf(".");
          ?if (pointbz < 0){
          ??strNumber = strNumber+".00";
          ?}else if(pointbz > 0){
          ??int k = strNum.length() - pointbz;
          ??if(k==2){
          ???strNumber = strNumber+"0";
          ??}else if(k==1){
          ???strNumber = strNumber+"00";
          ??}
          ?}
          ?int length = strNumber.length();
          ?if (length > 16){
          ??return "您輸入的值過大系統(tǒng)無法處理!";
          ?}
          ?String strb ="";
          ?String strm ="";
          ?String strq ="";
          ?String stry ="";
          ?String strf ="";
          ?//得到分
          ?if(length==3){
          ??strf = getCent(strNumber);
          ??strEng = strEng + strf;
          ?}else if(length>3&&length<7){
          ??stry = get3Eng(strNumber.substring(0,length-3));
          ??strf = getCent(strNumber.substring(length-3,length));
          ??strEng = strEng + stry + " " + str3[2];
          ??if (!strf.equals("")){
          ???strEng = strEng + " AND " +strf;
          ??}
          ?}else if(length>6&&length<10){
          ??strq = get3Eng(strNumber.substring(0,length-6));
          ??stry = get3Eng(strNumber.substring(length-6,length-3));
          ??strf = getCent(strNumber.substring(length-3,length));
          ??strEng = strEng + strq + " " + str3[5];
          ??if(stry.equals("")){
          ???strEng = strEng + " " +stry;
          ??}else{
          ???strEng = strEng + " " +stry + " " + str3[2];
          ??}
          ??if(!strf.equals("")){
          ???strEng = strEng + " AND " +strf;
          ??}
          ?}else if(length>9&&length<13){
          ??strm = get3Eng(strNumber.substring(0,length-9));
          ??strq = get3Eng(strNumber.substring(length-9,length-6));
          ??stry = get3Eng(strNumber.substring(length-6,length-3));
          ??strf = getCent(strNumber.substring(length-3,length));
          ??strEng = strEng + strm + " " + str3[8];
          ??if(!strq.equals("")){
          ???strEng = strEng + " " + strq + " " + str3[5];
          ??}
          ??if(!stry.equals("")){
          ???strEng = strEng + " " + stry + " " + str3[2];
          ??}else{
          ???strEng = strEng + " " + str3[2];
          ??}
          ??if(!strf.equals("")){
          ???strEng = strEng + " AND " + strf;
          ??}
          ?}else if(length>12&&length<16){
          ??strb = get3Eng(strNumber.substring(0,length-12));
          ??strm = get3Eng(strNumber.substring(length-12,length-9));
          ??strq = get3Eng(strNumber.substring(length-9,length-6));
          ??stry = get3Eng(strNumber.substring(length-6,length-3));
          ??strf = getCent(strNumber.substring(length-3,length));
          ??strEng = strEng + strb + " " + str3[11];
          ??if(!strm.equals("")){
          ???strEng = strEng + " " + strm + " " + str3[8];
          ??}
          ??if(!strq.equals("")){
          ???strEng = strEng + " " + strq + " " + str3[5];
          ??}
          ??if(!stry.equals("")){
          ???strEng = strEng + " " + stry + " " + str3[2];
          ??}else{
          ???strEng = strEng + " " + str3[2];
          ??}
          ??if(!strf.equals("")){
          ???strEng = strEng + " AND " + strf;
          ??}
          ?}

          ?return strEng+" ONLY";
          }

          ? public static String formatC(char x)
          ? {
          ??? String a="";
          ??? switch(x)
          ??? {
          ????? case'0':? a="零";
          ??????????????? break;
          ????? case'1':? a="壹";
          ??????????????? break;
          ????? case'2':? a="貳";
          ??????????????? break;
          ????? case'3':? a="叁";
          ??????????????? break;
          ????? case'4':? a="肆";
          ??????????????? break;
          ????? case'5': a="伍";
          ??????????????? break;
          ????? case'6':? a="陸";
          ??????????????? break;
          ????? case'7':? a="柒";
          ??????????????? break;
          ????? case'8':? a="捌";
          ??????????????? break;
          ????? case'9':? a="玖";
          ??????????????? break;
          ??? }
          ??? return a;
          ? }
          }

          // 基本考慮
          // 人民幣大寫單位銀行規(guī)定用"元"
          // 無零頭金額后跟"整",有則不跟
          // 角為零時(shí)不寫角(如:零叁分)
          // 四舍五入到分
          // 為減少判讀疑惑(一般對大寫金額預(yù)期較高)和
          // 體現(xiàn)人民幣基本單位為元,金額低于壹圓前仍加"零元"

          // 整數(shù)轉(zhuǎn)換
          // 若干零后若跟非零值,只顯示一個(gè)零,否則不顯示
          // 萬(億)前有零后不加零,因億、萬為一完整單位,
          // (如:拾萬貳仟 比 拾萬零貳仟 更順些)
          // 億為漢語計(jì)數(shù)最大單位,只要進(jìn)位到總是顯示(如:壹億億)
          // 萬為次最大單位,億萬之間必須有非零值方顯示萬
          // (如"壹億"不可顯示為"壹億萬")
          //
          // 為減少被竄改的可能性,十進(jìn)位總發(fā)壹音,這和下面的習(xí)慣讀法不一樣
          //????? (十進(jìn)位處于第一位不發(fā)壹音,如"拾元"非"壹拾元",
          //??????? 十進(jìn)位處前有零是否不發(fā)壹音不太確定,
          //??????? 如"叁仟零壹拾元"還是"叁仟零拾元"?)
          // 用"拾萬"不用"壹拾萬",因?yàn)槊總€(gè)整數(shù)進(jìn)位后都有進(jìn)位單位(拾佰仟萬億)
          // 這樣即使金額前沒有附防竄改的前綴如"人民幣"字樣也難竄改些
          // 因?yàn)橹辽僖犹韮蓚€(gè)漢字并且改動(dòng)后數(shù)字必須進(jìn)位才能竄改成
          // (如"拾萬"可改成"叁拾萬",而"壹拾萬"至少要改成"壹佰壹拾萬")


          評論

          # re: Java 實(shí)現(xiàn)人民幣小寫轉(zhuǎn)大寫[轉(zhuǎn)載http://sunjun.blogchina.com/]  回復(fù)  更多評論   

          2009-01-21 01:47 by 人民幣匯率
          而"壹拾萬"至少要改成"壹佰壹拾萬
          主站蜘蛛池模板: 景谷| 大新县| 邵阳市| 大竹县| 景宁| 新河县| 通州区| 庆安县| 建德市| 定远县| 南丰县| 黄浦区| 启东市| 比如县| 新昌县| 沧州市| 平邑县| 永康市| 炉霍县| 永清县| 灵宝市| 沙田区| 河曲县| 沂水县| 安顺市| 吉木萨尔县| 旺苍县| 和硕县| 通榆县| 新巴尔虎右旗| 察隅县| 拉萨市| 雷州市| 南川市| 平邑县| 泗洪县| 康保县| 潞西市| 瑞昌市| 敦化市| 秦皇岛市|