JAVA数字大写金额转换

public   class  MoneyUtil {

  

  
private   static   final  String[] NUMBERS  =   " " " " " " " " " " " " " " ,
      
" " " " " "  };
  

  
private   static   final  String[] IUNIT  =   " " " " " " " " " " " " " " ,
      
" " " 亿 " " " " " " " " " " " " " " "  };
  

  
private   static   final  String[] DUNIT  =   " " " " " "  };

  

  
public   static  String toChinese(String str) {
    str 
=  str.replaceAll( " , " "" ); //  去掉","
    String integerStr; //  整数部分数字
    String decimalStr; //  小数部分数字

    
//  初始化:分离整数部分和小数部分
     if  (str.indexOf( " . " >   0 {
      integerStr 
=  str.substring( 0 str.indexOf( " . " ));
      decimalStr 
=  str.substring(str.indexOf( " . " +   1 );
    
else   if  (str.indexOf( " . " ==   0 {
      integerStr 
=   "" ;
      decimalStr 
=  str.substring( 1 );
    
else  {
      integerStr 
=  str;
      decimalStr 
=   "" ;
    }
    
//  integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)
     if  ( ! integerStr.equals( "" )) {
      integerStr 
=  Long.toString(Long.parseLong(integerStr));
      
if  (integerStr.equals( " 0 " )) {
        integerStr 
=   "" ;
      }
    }
    
//  overflow超出处理能力,直接返回
     if  (integerStr.length()  >  IUNIT.length) {
      System.out.println(str 
+   " :超出处理能力 " );
      
return  str;
    }

    
int [] integers  =  toArray(integerStr); //  整数部分数字
     boolean  isMust5  =  isMust5(integerStr); //  设置万单位
     int [] decimals  =  toArray(decimalStr); //  小数部分数字
     return  getChineseInteger(integers, isMust5)  +  getChineseDecimal(decimals);
  }

  

  
private   static   int [] toArray(String number) {
    
int [] array  =   new   int [number.length()];
    
for  ( int   =   0 <  number.length(); i ++ {
      array[i] 
=  Integer.parseInt(number.substring(i,  +   1 ));
    }
    
return  array;
  }

  

  
private   static  String getChineseInteger( int [] integers,  boolean  isMust5) {
    StringBuffer chineseInteger 
=   new  StringBuffer( "" );
    
int  length  =  integers.length;
    
for  ( int   =   0 <  length; i ++ {
      
//  0出现在关键位置:1234(万)5678(亿)9012(万)3456(元)
      
//  特殊情况:10(拾元、壹拾元、壹拾万元、拾万元)
      String key  =   "" ;
      
if  (integers[i]  ==   0 {
        
if  ((length  -  i)  ==   13 ) //  万(亿)(必填)
          key  =  IUNIT[ 4 ];
        
else   if  ((length  -  i)  ==   9 ) //  亿(必填)
          key  =  IUNIT[ 8 ];
        
else   if  ((length  -  i)  ==   5   &&  isMust5) //  万(不必填)
          key  =  IUNIT[ 4 ];
        
else   if  ((length  -  i)  ==   1 ) //  元(必填)
          key  =  IUNIT[ 0 ];
        
//  0遇非0时补零,不包含最后一位
         if  ((length  -  i)  >   1   &&  integers[i  +   1 !=   0 )
          key 
+=  NUMBERS[ 0 ];
      }
      chineseInteger.append(integers[i] 
==   0   ?  key
          (NUMBERS[integers[i]] 
+  IUNIT[length  -   -   1 ]));
    }
    
return  chineseInteger.toString();
  }

  

  
private   static  String getChineseDecimal( int [] decimals) {
    StringBuffer chineseDecimal 
=   new  StringBuffer( "" );
    
for  ( int   =   0 <  decimals.length; i ++ {
      
//  舍去3位小数之后的
       if  (i  ==   3 )
        
break ;
      chineseDecimal.append(decimals[i] 
==   0   ?   ""
          (NUMBERS[decimals[i]] 
+  DUNIT[i]));
    }
    
return  chineseDecimal.toString();
  }

  

  
private   static   boolean  isMust5(String integerStr) {
    
int  length  =  integerStr.length();
    
if  (length  >   4 {
      String subInteger 
=   "" ;
      
if  (length  >   8 {
        
//  取得从低位数,第5到第8位的字串
        subInteger  =  integerStr.substring(length  -   8 length  -   4 );
      
else  {
        subInteger 
=  integerStr.substring( 0 length  -   4 );
      }
      
return  Integer.parseInt(subInteger)  >   0 ;
    
else  {
      
return   false ;
    }
  }

  
public   static   void  main(String[] args) {
    String number 
=   " 1.23 " ;
    System.out.println(number 
+   "   "   +  MoneyUtil.toChinese(number));
    number 
=   " 1234567890123456.123 " ;
    System.out.println(number 
+   "   "   +  MoneyUtil.toChinese(number));
    number 
=   " 0.0798 " ;
    System.out.println(number 
+   "   "   +  MoneyUtil.toChinese(number));
    number 
=   " 10,001,000.09 " ;
    System.out.println(number 
+   "   "   +  MoneyUtil.toChinese(number));
    number 
=   " 01.107700 " ;
    System.out.println(number 
+   "   "   +  MoneyUtil.toChinese(number));
  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值