# re: 如何將字符串或者數字轉換成大寫貨幣 回復 更多評論
2008-07-19 17:52 by
很不錯,但我用另外的數字測試時出現錯誤,發現當整數部分大于7位數的時候出錯。我調試了好多次,只發現了出現問題的地方(在下面的程序中已經標出來了),但卻不知是什么原因,知道原因的告訴我一聲,萬分感謝!給我郵件: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;//防止浮點數四舍五入造成誤差
String Result = "";
String capitalLetter = "零壹貳叁肆伍陸柒捌玖";
String moneytaryUnit = "分角圓拾佰仟萬拾佰仟億拾佰仟萬拾佰仟億拾佰仟";
String tempCapital,tempUnit;
int integer;//錢的整數部分
int point;//錢的小數部分
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 = "零圓";
/*
* 貨幣整數部分操作
* 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;
}
/**
*
* @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: 如何將字符串或者數字轉換成大寫貨幣 回復 更多評論
2009-03-26 15:37 by
LZ沒考慮0的問題,例如:100200.
按正常的習慣,應該會顯示拾萬零貳佰.
結果會是這樣嗎??呵呵