笔试中的编程题2

把 数字金额 转换成  中文金额。 如: 23424.12 ----> 贰万叁仟肆佰贰拾肆圆壹角贰分. 郁闷...    转个过来(教训)。
import  java.math.BigDecimal;

public   class  ChineseCurrency {
    
//  中文金额单位数组
    String[] arrChineseUnit  =  {  " " " " " " " " " " " " " " " " " " ,
            
" " " 亿 " " " " " " "  };
    
//  中文数字字符数组
    String[] arrChineseNum  =  {  " " " " " " " " " " " " " " " " " " " "  };

    
/**
     * Description 将数字金额转换为中文金额
     * 
     * 
@param  BigDecimal
     *            bigdMoneyNumber 转换前的数字金额
     * 
@return  String 调用:<br/>
     *         myToChineseCurrency("101.89")="壹佰零壹圆捌角玖分"
     *         myToChineseCurrency("100.89")="壹佰零捌角玖分"
     *         myToChineseCurrency("100")="壹佰圆整"
     
*/
    
public  String DoNumberCurrencyToChineseCurrency(BigDecimal moneyNumber) {
        String strChineseCurrency 
=   "" ;
        
//  零数位标记
         boolean  isZero  =   true ;
        
//  中文金额单位下标
         int  chineseUnitIndex  =   0 ;
        
try  {
            
if  (moneyNumber.intValue()  ==   0 ) {
                
return   " 零圆整 " ;
            }
            
//  处理小数部分,四舍五入
             double  doubMoneyNumber  =  Math
                    .round(moneyNumber.doubleValue() 
*   100 );
            
//  是否负数
             boolean  bNegative  =  doubMoneyNumber  <   0 ;
            
//  取绝对值
            doubMoneyNumber  =  Math.abs(doubMoneyNumber);

            
//  循环处理转换操作
             while  (doubMoneyNumber  >   0 ) {
                
//  整的处理(无小数位)
                 if  (chineseUnitIndex  ==   2   &&  strChineseCurrency.length()  ==   0 )
                    strChineseCurrency 
=  strChineseCurrency  +   " " ;

                
//  非零数位的处理
                 if  (doubMoneyNumber  %   10   >   0 ) {
                    strChineseCurrency 
=  arrChineseNum[( int ) doubMoneyNumber  %   10 ]
                            
+  arrChineseUnit[chineseUnitIndex]
                            
+  strChineseCurrency;
                    isZero 
=   false ;
                }
                
//  零数位的处理
                 else  {
                    
//  元的处理(个位)
                     if  (chineseUnitIndex  ==   2 ) {
                        
//  段中有数字
                         if  (doubMoneyNumber  >   0 ) {
                            strChineseCurrency 
=  arrChineseUnit[chineseUnitIndex]
                                    
+  strChineseCurrency;
                            isZero 
=   true ;
                        }
                    }
                    
//  万、亿数位的处理
                     else   if  (chineseUnitIndex  ==   6   ||  chineseUnitIndex  ==   10 ) {
                        
//  段中有数字
                         if  (doubMoneyNumber  %   1000   >   0 )
                            strChineseCurrency 
=  arrChineseUnit[chineseUnitIndex]
                                    
+  strChineseCurrency;
                    }
                    
//  前一数位非零的处理
                     if  ( ! isZero) {
                        strChineseCurrency 
=  arrChineseNum[ 0 ]
                                
+  strChineseCurrency;
                    }
                    isZero 
=   true ;
                }
                doubMoneyNumber 
=  Math.floor(doubMoneyNumber  /   10 );
                chineseUnitIndex
++ ;
            }
            
//  负数的处理
             if  (bNegative)
                strChineseCurrency 
=   " "   +  strChineseCurrency;
        } 
catch  (Exception e) {

        }
        
return  strChineseCurrency;
    }
}

转载于:https://www.cnblogs.com/oakpip/archive/2011/03/19/1989031.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值