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

          主要功能:

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

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

          文件:MoneyConvert.java

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

          測(cè)試代碼:

          ?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);
          }

          輸出結(jié)果:

          叁萬(wàn)叁圓
          叁萬(wàn)叁圓

          ?

          Feedback

          # re: 如何將字符串或者數(shù)字轉(zhuǎn)換成大寫(xiě)貨幣  回復(fù)  更多評(píng)論   

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

          # re: 如何將字符串或者數(shù)字轉(zhuǎn)換成大寫(xiě)貨幣  回復(fù)  更多評(píng)論   

          2008-07-19 17:52 by 陳育平
          很不錯(cuò),但我用另外的數(shù)字測(cè)試時(shí)出現(xiàn)錯(cuò)誤,發(fā)現(xiàn)當(dāng)整數(shù)部分大于7位數(shù)的時(shí)候出錯(cuò)。我調(diào)試了好多次,只發(fā)現(xiàn)了出現(xiàn)問(wèn)題的地方(在下面的程序中已經(jīng)標(biāo)出來(lái)了),但卻不知是什么原因,知道原因的告訴我一聲,萬(wàn)分感謝!給我郵件: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;//防止浮點(diǎn)數(shù)四舍五入造成誤差
          String Result = "";
          String capitalLetter = "零壹貳叁肆伍陸柒捌玖";
          String moneytaryUnit = "分角圓拾佰仟萬(wàn)拾佰仟億拾佰仟萬(wàn)拾佰仟億拾佰仟";
          String tempCapital,tempUnit;

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

          /*
          * 以下代碼用測(cè)試用例“1234567890.123”時(shí)出錯(cuò),
          * 打印point=-4587,期望為point=12
          * 用“4567890.123”時(shí)卻又正確
          */
          point = (int)(100*(money-(float)integer));
          System.out.println(point);
          if(0 == integer)
          Result = "零圓";
          /*
          * 貨幣整數(shù)部分操作
          * 1。依次取得每一位上的值
          * 2。轉(zhuǎn)換成大寫(xiě)
          * 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
          * 測(cè)試用例為"1234567890.123"時(shí)出錯(cuò)
          * 為“4567890.123“時(shí)正確
          */
          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ù)字轉(zhuǎn)換成大寫(xiě)貨幣  回復(fù)  更多評(píng)論   

          2009-03-26 15:37 by foxaobe
          LZ沒(méi)考慮0的問(wèn)題,例如:100200.
          按正常的習(xí)慣,應(yīng)該會(huì)顯示拾萬(wàn)零貳佰.
          結(jié)果會(huì)是這樣嗎??呵呵
          主站蜘蛛池模板: 乐陵市| 新乡县| 锦屏县| 元氏县| 岗巴县| 忻州市| 漠河县| 永州市| 仁布县| 马关县| 榆中县| 额济纳旗| 常熟市| 中阳县| 石林| 师宗县| 分宜县| 平潭县| 繁峙县| 卫辉市| 汾阳市| 乐业县| 饶河县| 玉屏| 宿松县| 北海市| 湖州市| 泽普县| 呼和浩特市| 嘉兴市| 大关县| 西藏| 博野县| 崇信县| 翁牛特旗| 小金县| 博爱县| 洞口县| 古丈县| 西华县| 普陀区|