posts - 10,comments - 5,trackbacks - 0


          ???? String HanDigiStr[] = new String[]{"零","壹","貳","叁","肆","伍","陸","柒","捌","玖"};

          ????? String HanDiviStr[] = new String[]{"","拾","佰","仟","萬","拾","佰","仟","億",
          ????????? "拾","佰","仟","萬","拾","佰","仟","億",
          ????????? "拾","佰","仟","萬","拾","佰","仟" };

          ???? /**
          ????? * 輸入字符串必須正整數(shù),只允許前導(dǎo)空格(必須右對齊),不宜有前導(dǎo)零
          ????? * @param NumStr
          ????? * @return
          ????? *? */
          ????? String PositiveIntegerToHanStr(String NumStr)
          ????? {
          ?????? String RMBStr = "";
          ?????? boolean lastzero = false;
          ?????? boolean hasvalue= false;?????? // 億、萬進位前有數(shù)值標記
          ?????? int len,n;
          ?????? len = NumStr.length();
          ?????? if( len > 15 ) return "數(shù)值過大!";
          ?????? 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 "輸入含非數(shù)字字符!";

          ??????? if( n!=0 ) {
          ???????? if( lastzero ) RMBStr += HanDigiStr[0];? // 若干零后若跟非零值,只顯示一個零
          ???????????????? // 除了億萬前的零不帶到后面
          ???????? //if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) )??? // 如十進位前有零也不發(fā)壹音用此行
          ???????? if( !( n==1 && (i%4)==1 && i==len-1 ) )???? // 十進位處于第一位不發(fā)壹音
          ????????? 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 ;????? // 萬進位前有值標記逢億復(fù)位
          ??????? 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 "數(shù)值位數(shù)過大!";
          ?????? // 四舍五入到分
          ?????? 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] + "分";
          ??????? }

          ????? // 下一行可用于非正規(guī)金融場合,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: 人民幣大小寫轉(zhuǎn)
          2009-01-21 01:44 | 人民幣
          零元叁分  回復(fù)  更多評論
            

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 武穴市| 德格县| 道孚县| 星座| 惠州市| 舟山市| 黔江区| 石楼县| 仙桃市| 会宁县| 龙岩市| 苍梧县| 商洛市| 杭州市| 报价| 肃宁县| 柘荣县| 舟山市| 城市| 呼图壁县| 科尔| 临泽县| 修武县| 庆安县| 芷江| 定南县| 嘉义县| 濮阳市| 张北县| 西畴县| 金华市| 镇原县| 山西省| 重庆市| 凤城市| 奉新县| 洪雅县| 双柏县| 庆城县| 革吉县| 长春市|