随笔 - 251  文章 - 504  trackbacks - 0
<2006年11月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

本博客系个人收集材料及学习记录之用,各类“大侠”勿扰!

留言簿(14)

随笔分类

收藏夹

My Favorite Web Sites

名Bloger

非著名Bloger

搜索

  •  

积分与排名

  • 积分 - 200396
  • 排名 - 285

最新评论

以下是一个把BigDecimal转化成中文的货币表示的一段代码,博君一哂!

//中文金额单位数组
straChineseUnit = new String[] {"分", "角", "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};
//中文数字字符数组
straChineseNumber = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};

    /**
    * Description   将数字金额转换为中文金额
    * @param        <p>BigDecimal bigdMoneyNumber 转换前的数字金额</P>
    * @return       String
    调用:myToChineseCurrency("101.89")="壹佰零壹圆捌角玖分"
    myToChineseCurrency("100.89")="壹佰零捌角玖分"
    myToChineseCurrency("100")="壹佰圆整"
    */
    public String DoNumberCurrencyToChineseCurrency(BigDecimal bigdMoneyNumber) {
        String strChineseCurrency = "";
        //零数位标记
        boolean bZero = true;
        //中文金额单位下标
        int ChineseUnitIndex = 0;

        DoPrintMessage("Calling Method DoNumberCurrencyToChineseCurrency");

        try {
            if (bigdMoneyNumber.intValue() == 0)
                return "零圆整";

            //处理小数部分,四舍五入
            double doubMoneyNumber = Math.round(bigdMoneyNumber.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 = straChineseNumber[(int)doubMoneyNumber % 10] + straChineseUnit[ChineseUnitIndex] + strChineseCurrency;
                    bZero = false;
                }
                //零数位的处理
                else {
                    //元的处理(个位)
                    if (ChineseUnitIndex == 2 ) {
                        //段中有数字
                        if (doubMoneyNumber > 0) {
                            strChineseCurrency = straChineseUnit[ChineseUnitIndex] + strChineseCurrency;
                            bZero = true;
                        }
                    }
                    //万、亿数位的处理
                    else if (ChineseUnitIndex == 6 || ChineseUnitIndex == 10) {
                        //段中有数字
                        if (doubMoneyNumber % 1000 > 0)
                            strChineseCurrency = straChineseUnit[ChineseUnitIndex] + strChineseCurrency;
                    }

                    //前一数位非零的处理
                    if (!bZero)
                        strChineseCurrency = straChineseNumber[0] + strChineseCurrency;

                    bZero = true;
                }

                doubMoneyNumber = Math.floor(doubMoneyNumber / 10);
                ChineseUnitIndex ++;
            }

            //负数的处理
            if (bNegative)
                strChineseCurrency = "负" + strChineseCurrency;
        }
        catch (Exception e) {
            DoPrintMessage("Exception Reason  : Call Method DoNumberCurrencyToChineseCurrency Error");
            DoPrintMessage("Exception Message : " + e.getMessage());
            e.printStackTrace();

            return "";
        }

        return strChineseCurrency;
    }

原文地址
posted on 2006-11-15 10:04 matthew 阅读(222) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: