如何将字符串或者数字转换成大写货币

Posted on 2006-11-23 17:51 Jaunt 阅读(2293) 评论(3)  编辑  收藏 所属分类: 咖啡Java

今天去面试却遇到了这样一道题“如何将字符串或者数字转换成大写货币”,当时没有做出来,很气愤,于是就在网上查涉及如何将字符串或者数字转换成大写货币的方法,终于找出了如何做的方法^_^

主要功能:

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

输出结果:

叁万叁圆
叁万叁圆

 

Feedback

# re: 如何将字符串或者数字转换成大写货币  回复  更多评论   

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

# 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 foxaobe
LZ没考虑0的问题,例如:100200.
按正常的习惯,应该会显示拾万零贰佰.
结果会是这样吗??呵呵

只有注册用户登录后才能发表评论。


网站导航: