My FAQ,最新最全的IT技术FAQ
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 未整理篇 | 技术讨论
  当前位置: > 程序开发 > 编程语言 > Java > 基础 > Java语言基础
把数字转换成中文货币表示
作者:未知 时间:2005-07-24 21:12 出处:JR 责编:My FAQ
              摘要:把数字转换成中文货币表示
以下是一个把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;
    }

 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 myfaq.com.cn All rights reserved. www.myfaq.com.cn 版权所有