JAVA 数字转人民币大写

在写这个之前,老师出的,把阿拉伯数字转化为人民币大写

因为想的跟老师不一样,被老师BS了下,回到住处就把这个写出来

如果有问题,请提出

package com.joyleft.client;

public class MoneyUtil {
 
 private static final String[] NUMBERS={ "","壹", "贰", "叁", "肆", "伍", "陆",
       "柒", "捌", "玖" };
 private static final String[]  IUNIT = { "元", "拾", "佰", "仟", "万", "拾", "佰",
       "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" };

 private static final String[] DUNIT = { "角", "分" };
 private static final String TOTAL="整";
 
 /**
  * 转成数组
  * @param number
  */
 public int[] toArray(String number){
  
  char[]cn=number.toCharArray();
  int []num=new int[cn.length];
  for(int i=0;i<cn.length;i++)
  {
   num[i]=Integer.parseInt(String.valueOf(cn[i]));
  }
  return num;
 }
 
 public void toChinese(String number){
  String strInt="";
  String strFloat="";
  String StrNum="";
  if(number.indexOf(",")>0)
   number=number.replace(",", "");
   
  if(number.indexOf(".")>0){//是否有小数点
   strInt=number.substring(0,number.indexOf("."));
  
   strFloat=number.substring(number.indexOf(".")+1);
   
   strFloat=round(strFloat);
   
   if("100".equals(strFloat)){//四舍五入后小数位没有了
    StrNum=this.handleInteger(strInt,true);
    strFloat="";
   }else{
    StrNum=this.handleInteger(strInt,false)+handleDecimal(strFloat);
   }
   
  }else{
   System.out.println(number);
  }
  System.out.println(StrNum);
 }
 /**
  * 整数部分处理
  * @param number
  */
 public String handleInteger(String number,boolean b){
  String strNum="人民币:";
  int[] num=null;
  if("0".equals(number)){
   return strNum+"";
  }
  num=toArray(number);

  for(int i=0;i<num.length;i++){
   if(b&&i==num.length-1){
    num[i]=num[i]+1;
    
   }
   if(num[i]!=0){
    strNum=strNum+NUMBERS[num[i]]+IUNIT[num.length-i-1];
    
    }else{
      if(num.length-i==13)//万亿位为零 加万字
       strNum=strNum+NUMBERS[num[i]]+IUNIT[num.length-i-1];
      else if(num.length-i==9)//亿位为零 加亿字
       strNum=strNum+NUMBERS[num[i]]+IUNIT[num.length-i-1];
      else if(num.length-i==5)//万位为零 加万字
       strNum=strNum+NUMBERS[num[i]]+IUNIT[num.length-i-1];
      else if(num.length-i==1)
       strNum=strNum+NUMBERS[num[i]]+IUNIT[num.length-i-1]+TOTAL;
    }
   }
  return strNum;
 }
 /**
  * 小数部分处理
  * @param number
  */
 public String handleDecimal(String number){
  String strNum="";
  
  int[] num=toArray(number);

  for(int i=0;i<num.length;i++){
   
   if(num[i]!=0)
    strNum=strNum+NUMBERS[num[i]]+DUNIT[i];
   else
    strNum=strNum+NUMBERS[num[i]]+TOTAL;
  }
  return strNum;
 }
 /**
  * 四舍五入  保留两位
  * @param num
  */
 public String round(String number){
  String strNum="0."+number;
  float num=Float.parseFloat(strNum);
  int reNum=(int)num*1000%10;//取得千分位
  int intNum=0;
  
  if(reNum>=5){
   num=(num*100+1);
   intNum=(int)num;
  }else{
   
   intNum=(int)(num*100);
  }
  
  strNum=String.valueOf(intNum);
  if(strNum.length()==1)
   strNum="0"+strNum;
  return strNum;
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  new MoneyUtil().toChinese("3453845546430.200");
  new MoneyUtil().toChinese("0.99");
 
 }

}
结果

人民币:叁万肆仟伍佰叁拾捌亿肆仟伍佰伍拾肆万陆仟肆佰叁拾元整贰角整
人民币:玖角玖分
 

评论 (3)
  1. avatar
    沙发
    airmaxshoes 2010-08-30 07:58

    老师不能这样嘛 不一样不代表不对呀 呵呵!

  2. avatar
    板凳
    通智广告 2010-09-19 04:43

    再过2天就是中秋节了,我在这里祝福您和您的家人中秋节快乐!

  3. avatar
    地板
    gps 2010-09-29 00:58

    很强大的语言,在学校里学过的。