posts - 19, comments - 53, trackbacks - 0, articles - 283
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          摘 :http://www.java2000.net/p32


          import java.math.BigDecimal;   
            
          public class ConvertNumber 
          {   
            
          /** 定義數(shù)組存放數(shù)字對(duì)應(yīng)的大寫(xiě) */
            
            
          private final static String[] STR_NUMBER = """""""""""""""""""" }
          ;   
            
            
          /** 定義數(shù)組存放位數(shù)的大寫(xiě) */
            
            
          private final static String[] STR_MODIFY = """""""""萬(wàn)""""""""""""""" }
          ;   
            
            
          /**  
             * 轉(zhuǎn)化整數(shù)部分  
             *   
             * 
          @param
           tempString  
             * 
          @return
           返回整數(shù)部分  
             
          */
            
            
          private static String getInteger(String tempString) 
          {   
              
          /** 用來(lái)保存整數(shù)部分?jǐn)?shù)字串 */
            
              String strInteger 
          = null;//     

              /** 記錄"."所在位置 */  
              
          int intDotPos = tempString.indexOf("."
          );   
              
          int intSignPos = tempString.indexOf("-"
          );   
              
          if (intDotPos == -1
          )   
                intDotPos 
          =
           tempString.length();   
              
          /** 取出整數(shù)部分 */
            
              strInteger 
          = tempString.substring(intSignPos + 1
          , intDotPos);   
              strInteger 
          = new
           StringBuffer(strInteger).reverse().toString();   
              StringBuffer sbResult 
          = new
           StringBuffer();   
              
          for (int i = 0; i < strInteger.length(); i++
          {   
                sbResult.append(STR_MODIFY[i]);   
                sbResult.append(STR_NUMBER[strInteger.charAt(i) 
          - 48
          ]);   
              }
             
                 
              sbResult 
          =
           sbResult.reverse();   
              replace(sbResult, 
          "零拾"""
          );   
              replace(sbResult, 
          "零佰"""
          );   
              replace(sbResult, 
          "零仟"""
          );   
              replace(sbResult, 
          "零萬(wàn)""萬(wàn)"
          );   
              replace(sbResult, 
          "零億"""
          );   
              replace(sbResult, 
          "零零"""
          );   
              replace(sbResult, 
          "零零零"""
          );   
              
          /** 這兩句不能顛倒順序 */
            
              replace(sbResult, 
          "零零零零萬(wàn)"""
          );   
              replace(sbResult, 
          "零零零零"""
          );   
              
          /** 這樣讀起來(lái)更習(xí)慣. */
            
              replace(sbResult, 
          "壹拾億""拾億"
          );   
              replace(sbResult, 
          "壹拾萬(wàn)""拾萬(wàn)"
          );   
              
          /** 刪除個(gè)位上的零 */
            
              
          if (sbResult.charAt(sbResult.length() - 1== '' && sbResult.length() != 1
          )   
                sbResult.deleteCharAt(sbResult.length() 
          - 1
          );   
              
          if (strInteger.length() == 2
          {   
                replace(sbResult, 
          "壹拾"""
          );   
              }
             
              
          /** 將結(jié)果反轉(zhuǎn)回來(lái). */
            
              
          return
           sbResult.toString();   
            }
             
            
            
          /**  
             * 轉(zhuǎn)化小數(shù)部分 例:輸入22.34返回叁肆  
             *   
             * 
          @param
           tempString  
             * 
          @return
            
             
          */
            
            
          private static String getFraction(String tempString) 
          {   
              String strFraction 
          = null
          ;   
              
          int intDotPos = tempString.indexOf("."
          );   
              
          /** 沒(méi)有點(diǎn)說(shuō)明沒(méi)有小數(shù),直接返回 */
            
              
          if (intDotPos == -1
          )   
                
          return ""
          ;   
              strFraction 
          = tempString.substring(intDotPos + 1
          );   
              StringBuffer sbResult 
          = new
           StringBuffer(strFraction.length());   
              
          for (int i = 0; i < strFraction.length(); i++
          {   
                sbResult.append(STR_NUMBER[strFraction.charAt(i) 
          - 48
          ]);   
              }
             
              
          return
           sbResult.toString();   
            }
             
            
            
          /**  
             * 判斷傳入的字符串中是否有.如果有則返回點(diǎn)  
             *   
             * 
          @param
           tempString  
             * 
          @return
            
             
          */
            
            
          private static String getDot(String tempString) 
          {   
              
          return tempString.indexOf("."!= -1 ? "點(diǎn)" : ""
          ;   
            }
             
            
            
          /**  
             * 判斷傳入的字符串中是否有-如果有則返回負(fù)  
             *   
             * 
          @param
           tempString  
             * 
          @return
            
             
          */
            
            
          private static String getSign(String tempString) 
          {   
              
          return tempString.indexOf("-"!= -1 ? "負(fù)" : ""
          ;   
            }
             
            
            
          /**  
             * 將一個(gè)數(shù)字轉(zhuǎn)化為金額  
             *   
             * 
          @param
           tempNumber 傳入一個(gè)double的變量  
             * 
          @return
           返一個(gè)轉(zhuǎn)換好的字符串  
             
          */
            
            
          public static String numberToChinese(double tempNumber) 
          {   
              java.text.DecimalFormat df 
          = new java.text.DecimalFormat("#.#########"
          );   
              String pTemp 
          =
           String.valueOf(df.format(tempNumber));   
              StringBuffer sbResult 
          = new StringBuffer(getSign(pTemp) + getInteger(pTemp) + getDot(pTemp) +
           getFraction(pTemp));   
              
          return
           sbResult.toString();   
            }
             
            
            
          public static String numberToChinese(BigDecimal tempNumber) 
          {   
              
          return
           numberToChinese(tempNumber.doubleValue());   
            }
             
            
            
          /**  
             * 替代字符  
             *   
             * 
          @param
           pValue  
             * 
          @param
           pSource  
             * 
          @param
           pDest  
             
          */
            
            
          private static void replace(StringBuffer pValue, String pSource, String pDest) 
          {   
              
          if (pValue == null || pSource == null || pDest == null
          )   
                
          return
          ;   
              
          /** 記錄pSource在pValue中的位置 */
            
              
          int intPos = 0
          ;   
              
          do 
          {   
                intPos 
          =
           pValue.toString().indexOf(pSource);   
                
          /** 沒(méi)有找到pSource */
            
                
          if (intPos == -1
          )   
                  
          break
          ;   
                pValue.delete(intPos, intPos 
          +
           pSource.length());   
                pValue.insert(intPos, pDest);   
              }
           while (true);   
            }
             
            
            
          /**  
             * 
          @param
           args  
             
          */
            
            
          public static void main(String[] args) 
          {   
              System.out.println(numberToChinese(
          1230400567.8934
          ));   
            }
             
          }
            

          評(píng)論

          # re: java 將數(shù)字金額轉(zhuǎn)化為漢字(摘)  回復(fù)  更多評(píng)論   

          2012-09-19 15:34 by 線(xiàn)程
          好機(jī)會(huì)
          主站蜘蛛池模板: 利津县| 青铜峡市| 黔西县| 静海县| 建宁县| 安多县| 沈丘县| 鹰潭市| 琼中| 桃源县| 松江区| 五大连池市| 靖安县| 马龙县| 永德县| 松桃| 林西县| 确山县| 永嘉县| 仁化县| 年辖:市辖区| 庆元县| 上高县| 石家庄市| 泰和县| 新昌县| 巴马| 揭东县| 襄汾县| 华宁县| 余江县| 玛沁县| 什邡市| 梨树县| 南投县| 舒城县| 房产| 乐清市| 四会市| 云南省| 张家川|