JR 精品文章 - 把数字转换成中文货币表示
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » Java入门 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
把数字转换成中文货币表示
yippit 整理   更新:2005-04-12 16:10:51  版本: 1.0   

以下是一个把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;
    }



版权声明  
本篇文章对您是否有帮助?  投票:         投票结果:     40       2
作者其它文章: 作者全部文章
评论人:ninjar 发表时间: Mon May 08 18:34:34 CST 2006
好啊
评论人:yszx76 发表时间: Sat May 20 18:45:02 CST 2006
编程分格很好!我正用,这个转换!
评论人:lyncn 发表时间: Tue Jul 25 09:49:52 CST 2006
大小写风格就有问题,if后面建议都加{},结果也是错的,
    BigDecimal bg3 = new BigDecimal("30000100.889");
    System.out.println(chinesecurrency.doNumberCurrencyToChineseCurrency(bg3));
的结果是“叁仟零壹佰圆捌角柒分”,测试太不充分了吧!
评论人:happylinyang 发表时间: Wed Sep 20 10:57:13 CST 2006
不错,支持一下,[good]
评论人:xs57224059 发表时间: Mon Apr 09 19:28:49 CST 2007
fsdafdgdgffv
评论人:xs57224059 发表时间: Mon Apr 09 19:31:03 CST 2007
khjkjlghklgk
评论人:nbnbnnb 发表时间: Tue Apr 22 11:18:05 CST 2008
很好的东西,很实用。

这个文章共有 7 条评论
主题: 编程题目:编写一个截取字符串的函数的截取! 上一篇文章
返回文章列表 返回〔Java入门〕
下一篇文章 主题: 一种针对特定数据的高效排序算法--算法复杂度为O (N)


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号