今天去面試卻遇到了這樣一道題“如何將字符串或者數字轉換成大寫貨幣”,當時沒有做出來,很氣憤,于是就在網上查涉及如何將字符串或者數字轉換成大寫貨幣的方法,終于找出了如何做的方法^_^
主要功能:
1.???String convertToCapitalMoney(String moneyStr)?
??????將字符串轉換成中文的大寫貨幣值
2.???String convertToCapitalMoney(double moneyValue)
??????將數字轉換成中文的大寫貨幣值
文件: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);
??? }
??? /*
???? *? 將數字轉換成中文的大寫貨幣值
???? *? @param?? moneyValue
???? *? @return
???? */
??? public static String convertToCapitalMoney(double moneyValue) {
??? ?double money = moneyValue + 0.005;? //? 防止浮點數四舍五入造成誤差
??? ?String Result = "";
??? ?String capitalLetter = "零壹貳叁肆伍陸柒捌玖";
??? ?String moneytaryUnit = "分角圓拾佰仟萬拾佰仟億拾佰仟萬拾佰仟億拾佰仟";???
??? ?String tempCapital, tempUnit;
??? ?
??? ?
??? ?int integer;?? //? 錢的整數部分
??? ?int point;???? //? 錢的小數部分
???? int tempValue; //? 錢的每一位的值
???? integer = (int)money;
???? point = (int)(100 * (money - (float)integer));
?
???? if (integer == 0)
???? ?Result = "零圓";
??????? /*
???????? *???? 貨幣整數部分操作
???????? *???? 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;
???? }
??????? /*
??????? *? 貨幣小數部分操作
????????*/
???? 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);
}
輸出結果:
叁萬叁仟叁佰叁拾叁圓貳角壹分
叁萬叁仟叁佰叁拾叁圓貳角壹分
?