笑看風云

          一切從頭開始
          posts - 28, comments - 1, trackbacks - 0, articles - 2

          把數字轉換成中文貨幣表示

          Posted on 2008-07-10 19:43 笑看風云 閱讀(260) 評論(1)  編輯  收藏 所屬分類: Java
                  最近在做開發的時候,有一部分功能要實現把數字轉換成中文貨幣表示并顯示給客戶端,想了好久不知道如何寫,到google上搜了一下,結果這方面的資料還比較多,看了一下別人寫的,感覺很不錯,就把它復制過來,根據實際需要改了一下,已經測試成功了.代碼如下:
          package test;

          import java.math.BigDecimal;

          public class StrangeCurrency {
          /**
          * Description 將數字金額轉換為中文金額

          */

          public static String DoNumberCurrencyToChineseCurrency(
              
          double bigdMoneyNumber) {
             
          // 中文金額單位數組
             String[] straChineseUnit = """""""""""""""",
               
          """""""""""" }
          ;
             
          // 中文數字字符數組
             String[] straChineseNumber = """""""""""""""",
               
          """" }
          ;
             String strChineseCurrency 
          = "";
             
          // 零數位標記
             boolean bZero = true;
             
          // 中文金額單位下標
             int ChineseUnitIndex = 0;
             
          // DoPrintMessage("Calling Method DoNumberCurrencyToChineseCurrency");
             try {
              
          if (bigdMoneyNumber == 0)
               
          return "零圓整";
              
          // 處理小數部分,四舍五入
              double doubMoneyNumber = Math.round(bigdMoneyNumber * 100);
              
          // 是否負數
              boolean bNegative = doubMoneyNumber < 0;
              
          // 取絕對值
              doubMoneyNumber = Math.abs(doubMoneyNumber);
              
          // 循環處理轉換操作
              while (doubMoneyNumber > 0{
               
          // 整的處理(無小數位)
               if (ChineseUnitIndex == 2 && strChineseCurrency.length() == 0)
                strChineseCurrency 
          = strChineseCurrency + "";
               
          // 非零數位的處理
               if (doubMoneyNumber % 10 > 0{
                strChineseCurrency 
          = straChineseNumber[(int) doubMoneyNumber % 10]
                  
          + straChineseUnit[ChineseUnitIndex]
                  
          + strChineseCurrency;
                bZero 
          = false;
               }

               
          // 零數位的處理
               else {
                
          // 元的處理(個位)
                if (ChineseUnitIndex == 2{
                 
          // 段中有數字
                 if (doubMoneyNumber > 0{
                  strChineseCurrency 
          = straChineseUnit[ChineseUnitIndex]
                    
          + strChineseCurrency;
                  bZero 
          = true;
                 }

                }

                
          // 萬、億數位的處理
                else if (ChineseUnitIndex == 6 || ChineseUnitIndex == 10{
                 
          // 段中有數字
                 if (doubMoneyNumber % 1000 > 0)
                  strChineseCurrency 
          = straChineseUnit[ChineseUnitIndex]
                    
          + strChineseCurrency;
                }

                
          // 前一數位非零的處理
                if (!bZero)
                 strChineseCurrency 
          = straChineseNumber[0]
                   
          + strChineseCurrency;
                bZero 
          = true;
               }

               doubMoneyNumber 
          = Math.floor(doubMoneyNumber / 10);
               ChineseUnitIndex
          ++;
              }

              
          // 負數的處理
              if (bNegative)
               strChineseCurrency 
          = "" + strChineseCurrency;
             }
           catch (Exception e) {
              
          // DoPrintMessage("Exception Reason : Call Method
              
          // DoNumberCurrencyToChineseCurrency Error");
              
          // DoPrintMessage("Exception Message : " + e.getMessage());
              e.printStackTrace();
              
          return "";
             }

             
          return strChineseCurrency;
          }



          /**
          * @param args
          */
          //測試代碼
          public static void main(String[] args) {
             double rmb=23434.89;
             StrangeCurrency sc=new StrangeCurrency();
             String s=sc.DoNumberCurrencyToChineseCurrency(rmb);
              System.out.println(s);
             }

          }

          Feedback

          # re: 把數字轉換成中文貨幣表示  回復  更多評論   

          2010-09-03 10:09 by 笨牛
          10001000.09 竟然輸出
          壹仟零壹仟圓零玖分
          主站蜘蛛池模板: 通江县| 阿勒泰市| 大渡口区| 卢龙县| 江安县| 阳高县| 玛多县| 沂南县| 荃湾区| 礼泉县| 漳州市| 凉山| 名山县| 阿巴嘎旗| 贞丰县| 饶阳县| 博白县| 和平区| 芜湖市| 嘉禾县| 保山市| 定日县| 宁城县| 宜黄县| 宁明县| 罗甸县| 韶关市| 甘孜县| 永兴县| 临朐县| 章丘市| 上虞市| 绍兴市| 东乡| 中江县| 浦东新区| 莫力| 枣阳市| 苏州市| 罗山县| 读书|