把数字转换成中文货币表示

//中文金额单位数组
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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值