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 | 人民幣
          零元叁分  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 萨嘎县| 中卫市| 绥滨县| 丘北县| 正宁县| 高青县| 横山县| 兴城市| 平乐县| 太白县| 叶城县| 阳曲县| 汶上县| 武夷山市| 咸丰县| 鹤峰县| 鸡东县| 阿巴嘎旗| 巴楚县| 洛扎县| 兴安县| 宁城县| 仁布县| 社旗县| 赞皇县| 微山县| 开远市| 广饶县| 大渡口区| 芜湖市| 开阳县| 时尚| 肇东市| 威海市| 昌都县| 武邑县| 呼伦贝尔市| 舟曲县| 左贡县| 泾源县| 旬阳县|