现在的位置: 首页 > 综合 > 正文

笔试中的编程题2

2012年11月08日 ⁄ 综合 ⁄ 共 3138字 ⁄ 字号 评论关闭
把 数字金额 转换成  中文金额。 如: 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;
    }
}

抱歉!评论已关闭.