数值转换成人民币大写的一个类

网上有许多将数值转换成人民币大写的代码,其中有不少写得很好的。昨天在Csdn上浏览,觉得这个比较简洁,但也有几点小Bug,稍加整理,觉得仍然与财务表达方式有不一致的地方,故先贴上来,请大家看看。

 

public   class  GetRMBToUpperCase  {

    
/*
     * 将数值转换成人民币大写,根据网上一搜索整理修改而成
     * 仍然有两个Bug 1、万亿以上可能出错 2、连续0可能出错
     
*/

    
public String getNumberToRMB(String rmb) {
        
/*
         * 人民币表达式中使用的中文字符(num)及计量单位位字符(dw)
         
*/

        String num 
= "零壹贰叁肆伍陆柒捌玖";
        String dw 
= "元拾佰仟万亿";
        
// 补齐小数位,多加“0”不影响计算和转换
        rmb += rmb.indexOf("."== -1 ? ".00" : "00";
        String mm[] 
= rmb.split("//.");
        String money 
= mm[0];
        
/*
         * 转换小数部分
         
*/

        String result 
= num.charAt(Integer.parseInt("" + mm[1].charAt(0)))
                
+ "" + num.charAt(Integer.parseInt("" + mm[1].charAt(1)))
                
+ "";
        
/*
         * 设置循环,从整数最低位开始转换
         
*/

        
for (int i = 0; i < money.length(); i++{// i=位数,从个位开始取值
            String str = "";// 设置人民币大写字符初值
            int n = Integer.parseInt(money.substring(money.length() - i - 1,
                    money.length() 
- i));// 当前位的数值=n
            str = str + num.charAt(n);// 根据数值取出人民币中文大写字符
            if (i == 0{// 根据位数判断
                str = str + dw.charAt(i);// 加上元
            }
 else if ((i + 4% 8 == 0{
                str 
= str + dw.charAt(4);// 加上万
            }
 else if (i % 8 == 0{
                str 
= str + dw.charAt(5);// 加上亿
            }
 else {
                str 
= str + dw.charAt(i % 4);// 不为整就求余
            }

            result 
= str + result;// 把当前字符加到最前面(最高位)
        }

        result 
= result.replaceAll("零([^亿万元角分])""");
        result 
= result.replaceAll("亿零+万""亿零");
        result 
= result.replaceAll("零+""");
        result 
= result.replaceAll("零([亿万元])""$1");
        result 
= result.replaceAll("壹拾""");
        result 
= result.replaceAll("^元""");
        result 
= result.replaceAll("零角零分""");
        result 
= result.replaceAll("零分""");
        
return result;
    }

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值