posts - 10,comments - 5,trackbacks - 0


          ???? 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;
          ????? }

          ?

          posted on 2006-08-01 11:37 Stellar.He 閱讀(567) 評論(1)  編輯  收藏

          FeedBack:
          # re: 人民幣大小寫轉
          2009-01-21 01:44 | 人民幣
          零元叁分  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 临城县| 武夷山市| 明星| 安泽县| 阜新| 咸宁市| 社会| 蕲春县| 临高县| 鄯善县| 南安市| 西华县| 永登县| 普兰县| 博客| 微博| 霍州市| 崇信县| 横山县| 高台县| 芒康县| 蒙山县| 茌平县| 定南县| 阿瓦提县| 银川市| 绥宁县| 丹东市| 安康市| 福清市| 札达县| 龙口市| 通渭县| 新蔡县| 榆林市| 永平县| 平安县| 治多县| 襄垣县| 苍山县| 天全县|