天空是藍色的

          做好軟件為中國 #gcc -c helloworld.c -o helloworld.o //編譯目標文件 #gcc helloworld.o -o helloworld //編譯成可執行exe #helloworld //運行exe
          數據加載中……
          Java中實現數字金額到中文大寫字符的轉換
          /**
            * <p>Title: money</p>
            * <p>Description: 
            *   *類名:money
            *   *函數:String PositiveIntegerToHanStr(String NumStr)   負責把小數點前面的數轉換為大寫中文
            *    *函數:?String NumToRMBStr(double val)   負責把輸入的double型的數轉換為大寫中文
            *   *注意java程序轉換的范圍是:小數點前面15位(已測試通過  
            *   * <p>Company: </p>
            * 鐘偉海
            * 
          @version 1.0
            
          */  
          import java.lang.Math;

          public class money{
           
          //調試時用main函數
           public static void main(String args[]){
            money mon 
          = new money();
            System.out.println(
          -99999999999999.999+mon.NumToRMBStr(-99999999999999.999));
            System.out.println(
          99999999999999.999+mon.NumToRMBStr(99999999999999.999));
            System.out.println(mon.NumToRMBStr(
          100000000.00));
            System.out.println(mon.NumToRMBStr(
          100000001.00));
            
            System.out.println(mon.NumToRMBStr(
          236.21));
           }
           
           String HanDigiStr[] 
          = new String[]{"","","","","","","","","",""};

           String HanDiviStr[] 
          = new String[]{"","","","","","","","","",
               
          "","","","","","","","",
               
          "","","","","","","" };
               
           
           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;
           }
           
           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;
           }
           
          }
          //END public class money

          此日記TrackBack地址: http://yhe.dalian.cn/trackback.do?log_id=203

          posted on 2005-11-25 09:36 bluesky 閱讀(522) 評論(0)  編輯  收藏 所屬分類: 工作總結

          主站蜘蛛池模板: 东乡族自治县| 城市| 习水县| 尤溪县| 来宾市| 法库县| 沾益县| 新化县| 桦南县| 蓝山县| 拉孜县| 土默特右旗| 临武县| 剑河县| 买车| 西安市| 日喀则市| 广昌县| 舒兰市| 洪洞县| 绥中县| 巍山| 六盘水市| 祁门县| 太仆寺旗| 绥芬河市| 琼中| 嘉祥县| 满洲里市| 吴旗县| 庆安县| 玛沁县| 湖南省| 牡丹江市| 通海县| 河东区| 霍山县| 德保县| 秦安县| 屯留县| 枞阳县|