???? String HanDigiStr[] = new String[]{"零","壹","貳","叁","肆","伍","陸","柒","捌","玖"};
????? String HanDiviStr[] = new String[]{"","拾","佰","仟","萬","拾","佰","仟","億",
????????? "拾","佰","仟","萬","拾","佰","仟","億",
????????? "拾","佰","仟","萬","拾","佰","仟" };
???? /**
????? * 輸入字符串必須正整數,只允許前導空格(必須右對齊),不宜有前導零
????? * @param NumStr
????? * @return
????? *? */
????? String PositiveIntegerToHanStr(String NumStr)
????? {
?????? String RMBStr = "";
?????? boolean lastzero = false;
?????? boolean hasvalue= false;?????? // 億、萬進位前有數值標記
?????? int len,n;
?????? len = NumStr.length();
?????? if( len > 15 ) return "數值過大!";
?????? for(int i=len-1;i>=0;i--) {
??????? if( NumStr.charAt(len-i-1)==' ' ) continue;
??????? n = NumStr.charAt(len-i-1) - '0';
??????? if( n<0 || n>9 ) return "輸入含非數字字符!";
??????? if( n!=0 ) {
???????? if( lastzero ) RMBStr += HanDigiStr[0];? // 若干零后若跟非零值,只顯示一個零
???????????????? // 除了億萬前的零不帶到后面
???????? //if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) )??? // 如十進位前有零也不發壹音用此行
???????? if( !( n==1 && (i%4)==1 && i==len-1 ) )???? // 十進位處于第一位不發壹音
????????? RMBStr += HanDigiStr[n];
???????? RMBStr += HanDiviStr[i];??? // 非零值后加進位,個位為空
???????? hasvalue = true;??????????????????????????????????? // 置萬進位前有值標記
??????? }else {
???????? if( (i%8)==0 || ((i%8)==4 && hasvalue) )? // 億萬之間必須有非零值方顯示萬
????????? RMBStr += HanDiviStr[i];?? // “億”或“萬”
??????? }
??????? if( i%8==0 ) hasvalue = false ;????? // 萬進位前有值標記逢億復位
??????? lastzero = (n==0) && (i%4!=0);
??????? }
?????? if( RMBStr.length()==0 ) return HanDigiStr[0];???????? // 輸入空字符或"0",返回"零"
?????? return RMBStr;
????? }
???? /**
????? *
????? * @param val
????? * @return
????? *? */
???? public? String NumToRMBStr(double val)
????? {
?????? String SignStr ="" ;
?????? String TailStr ="";
?????? long? fraction, integer;
?????? int jiao,fen;
?????? if( val<0 ) {
??????? val = -val;
??????? SignStr = "負";
??????? }
?????? if(val > 99999999999999.999 || val <-99999999999999.999 ) return "數值位數過大!";
?????? // 四舍五入到分
?????? long temp = Math.round(val*100);
?????? integer = temp/100;
?????? fraction = temp%100;
?????? jiao = (int)fraction/10;
?????? fen = (int)fraction%10;
?????? if( jiao==0 && fen==0 ) {
??????? TailStr = "整";
??????? }
?????? else {
??????? TailStr = HanDigiStr[jiao];
??????? if( jiao!=0 )
???????? TailStr += "角";
??????? if( integer==0 && jiao==0 )??????????????? // 零元后不寫零幾分
???????? TailStr = "";
??????? if( fen!=0 )
???????? TailStr += HanDigiStr[fen] + "分";
??????? }
????? // 下一行可用于非正規金融場合,0.03只顯示“叁分”而不是“零元叁分”
????? //??????? if( !integer ) return? SignStr+TailStr;
?????? return SignStr+PositiveIntegerToHanStr(String.valueOf(integer) )+"元"+TailStr;
????? }
?