# 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.
按正常的习惯,应该会显示拾万零贰佰.
结果会是这样吗??呵呵