如何將字符串或者數(shù)字轉換成大寫貨幣

          Posted on 2006-11-23 17:51 Jaunt 閱讀(2304) 評論(3)  編輯  收藏 所屬分類: 咖啡Java

          今天去面試卻遇到了這樣一道題“如何將字符串或者數(shù)字轉換成大寫貨幣”,當時沒有做出來,很氣憤,于是就在網(wǎng)上查涉及如何將字符串或者數(shù)字轉換成大寫貨幣的方法,終于找出了如何做的方法^_^

          主要功能:

          1.???String convertToCapitalMoney(String moneyStr)?
          ??????將字符串轉換成中文的大寫貨幣值

          2.???String convertToCapitalMoney(double moneyValue)
          ??????將數(shù)字轉換成中文的大寫貨幣值

          文件:MoneyConvert.java

          public class MoneyConvert {
          ???? /*
          ????? *? <p>Description: 字符串處理的公共類</p>
          ????? *? <p>Copyright 2006 </p>
          ????? *? @author? jaunt
          ????? *? @Create Date : 2006-11-23
          ????? */
          ???
          ???? /*
          ????? *? 將字符串轉換成中文的大寫貨幣值
          ????? *? @param?? moneyStr
          ????? *? @return
          ????? */
          ??? public static String convertToCapitalMoney(String moneyStr) {
          ??? ?double money = 0;
          ??? ?try {
          ??? ??money = Double.parseDouble(moneyStr);
          ???? }
          ??? ?catch (Exception e) {
          ??? ??
          ???? }
          ??? ?return convertToCapitalMoney(money);
          ??? }
          ??? /*
          ???? *? 將數(shù)字轉換成中文的大寫貨幣值
          ???? *? @param?? moneyValue
          ???? *? @return
          ???? */
          ??? public static String convertToCapitalMoney(double moneyValue) {
          ??? ?double money = moneyValue + 0.005;? //? 防止浮點數(shù)四舍五入造成誤差
          ??? ?String Result = "";
          ??? ?String capitalLetter = "零壹貳叁肆伍陸柒捌玖";
          ??? ?String moneytaryUnit = "分角圓拾佰仟萬拾佰仟億拾佰仟萬拾佰仟億拾佰仟";???
          ??? ?String tempCapital, tempUnit;
          ??? ?
          ??? ?
          ??? ?int integer;?? //? 錢的整數(shù)部分
          ??? ?int point;???? //? 錢的小數(shù)部分
          ???? int tempValue; //? 錢的每一位的值
          ???? integer = (int)money;
          ???? point = (int)(100 * (money - (float)integer));
          ?
          ???? if (integer == 0)
          ???? ?Result = "零圓";
          ??????? /*
          ???????? *???? 貨幣整數(shù)部分操作
          ???????? *???? 1.??? 依次取得每一位上的值
          ???????? *???? 2.??? 轉換成大寫
          ???????? *???? 3.??? 確定貨幣單位
          ??????? */
          ???? for (int i = 1; integer > 0; i++) {
          ???? ?tempValue = (integer % 10);???
          ???? ?tempCapital = capitalLetter.substring(tempValue, tempValue + 1);????
          ???? ?tempUnit = moneytaryUnit.substring(i + 1, i + 2);????
          ???? ?Result = tempCapital + tempUnit + Result;???
          ???? ?integer =? integer / 10;
          ???? }
          ??????? /*
          ??????? *? 貨幣小數(shù)部分操作
          ????????*/
          ???? tempValue = (point / 10);?
          ???? for (int i = 1; i > -1; i--) {????
          ???? ?tempCapital = capitalLetter.substring(tempValue, tempValue + 1);???
          ???? ?tempUnit = moneytaryUnit.substring(i, i + 1);???
          ???? ?Result = Result + tempCapital + tempUnit;???
          ???? ?tempValue = point % 10;
          ???? }
          ???? return Result;
          ??? }??
          }

          測試代碼:

          ?public static void main(String[] args) {
          ?
          ??? ?String money1 = MoneyConvert.convertToCapitalMoney("33333.214");
          ??????? System.out.println(money1);
          ??????? String money = MoneyConvert.convertToCapitalMoney(33333.214);
          ??????? System.out.println(money);
          }

          輸出結果:

          叁萬叁圓
          叁萬叁圓

          ?

          Feedback

          # re: 如何將字符串或者數(shù)字轉換成大寫貨幣  回復  更多評論   

          2006-11-23 19:28 by BeanSoft
          支持一下!

          # re: 如何將字符串或者數(shù)字轉換成大寫貨幣  回復  更多評論   

          2008-07-19 17:52 by 陳育平
          很不錯,但我用另外的數(shù)字測試時出現(xiàn)錯誤,發(fā)現(xiàn)當整數(shù)部分大于7位數(shù)的時候出錯。我調試了好多次,只發(fā)現(xiàn)了出現(xiàn)問題的地方(在下面的程序中已經(jīng)標出來了),但卻不知是什么原因,知道原因的告訴我一聲,萬分感謝!給我郵件:yuping8420@163.com
          我把程序附在下面:

          public class MoneyConvert {

          /**
          *
          * @param moneyValue
          * @return
          */
          public static String convertToCapitalMoney(String moneyValue){
          double money = 0;
          try{
          money = Double.parseDouble(moneyValue);
          System.out.println(money);
          }catch(Exception e){

          }
          return convertToCapitalMoney(money);
          }
          /**
          *
          * @param moneyValue
          * @return
          */
          public static String convertToCapitalMoney(Double moneyValue){
          double money = moneyValue + 0.005;//防止浮點數(shù)四舍五入造成誤差
          String Result = "";
          String capitalLetter = "零壹貳叁肆伍陸柒捌玖";
          String moneytaryUnit = "分角圓拾佰仟萬拾佰仟億拾佰仟萬拾佰仟億拾佰仟";
          String tempCapital,tempUnit;

          int integer;//錢的整數(shù)部分
          int point;//錢的小數(shù)部分
          int tempValue;//錢的每一位的值
          integer = (int)money;

          /*
          * 以下代碼用測試用例“1234567890.123”時出錯,
          * 打印point=-4587,期望為point=12
          * 用“4567890.123”時卻又正確
          */
          point = (int)(100*(money-(float)integer));
          System.out.println(point);
          if(0 == integer)
          Result = "零圓";
          /*
          * 貨幣整數(shù)部分操作
          * 1。依次取得每一位上的值
          * 2。轉換成大寫
          * 3。確定貨幣單位
          */
          for(int i=1;integer>0;i++){
          tempValue = (integer%10);
          tempCapital = capitalLetter.substring(tempValue, tempValue+1);
          tempUnit = moneytaryUnit.substring(i+1, i+2);
          Result = tempCapital + tempUnit + Result;
          integer = integer/10;
          }
          /*
          * 貨幣小數(shù)部分操作
          */
          tempValue = (point/10);
          for(int i=1;i>-1;i--){
          tempCapital = capitalLetter.substring(tempValue,tempValue+1 );
          tempUnit = moneytaryUnit.substring(i, i+1);
          Result = Result + tempCapital + tempUnit;
          tempValue = point%10;
          }
          return Result;
          }

          /**
          *
          * @param args
          * 測試用例為"1234567890.123"時出錯
          * 為“4567890.123“時正確
          */
          public static void main(String[] args) {
          String money2 = MoneyConvert.convertToCapitalMoney("4567890.123");
          System.out.println(money2);
          String money1 = MoneyConvert.convertToCapitalMoney("1234567890.123");
          System.out.println(money1);
          }

          }

          # re: 如何將字符串或者數(shù)字轉換成大寫貨幣  回復  更多評論   

          2009-03-26 15:37 by foxaobe
          LZ沒考慮0的問題,例如:100200.
          按正常的習慣,應該會顯示拾萬零貳佰.
          結果會是這樣嗎??呵呵
          主站蜘蛛池模板: 黄陵县| 灯塔市| 隆子县| 青河县| 和平县| 乌鲁木齐市| 罗田县| 布尔津县| 淮北市| 奈曼旗| 科尔| 海丰县| 通河县| 汾西县| 拉萨市| 河池市| 梓潼县| 松江区| 绥江县| 金湖县| 江达县| 东辽县| 夏津县| 万盛区| 景洪市| 临西县| 鸡西市| 樟树市| 黄石市| 库车县| 永靖县| 昌吉市| 图木舒克市| 宁晋县| 军事| 双桥区| 光山县| 开封市| 融水| 东安县| 额济纳旗|