人民币小写转成大写

//人民币小写转成大写
    //******************************************
    public static String numberToChinese(double d) {
    	String prefix = "";
    	if(d < 0){
    		d = Math.abs(d);
    		prefix = "负";
    	}
        //大写数字的数组

        String as[] = {

        "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"

        };

        //定义大写货币单位的排列数组

        String as1[] = {

        "仟", "佰", "拾", "万", "仟", "佰", "拾", "亿", "仟", "佰",

        "拾", "万", "仟", "佰", "拾", "元", "角", "分"

        };

        String as2[] = new String[40];

        String as3[] = new String[40];

        int ai[] = new int[20];

        double d4 = 1000000000000000D;

        StringBuffer stringbuffer = new StringBuffer("");

        String s;

        //判断待转换金额是否等于零

        if (d == 0.0D) {

            s = "零元整";

        }

        else {

            //将小数点删除

            d *= 100D;

            //获得d4的数量级,即d所在的数量级(如:d为1200098.0,d4为1000000)

            for (; d4 >= 1.0D; d4 /= 10D) {

                double d2 = d / d4;

                if (d2 >= 1.0D)

                    break;

            }

            int i;

            //将d值按位进行截取并存放到数组中

            for (i = 0; d4 >= 1.0D; i++) {

                //获得d整除后的值,如1.200098

                double d3 = d / d4;

                //截取整数并放到数组中,如1,2,0,....

                ai[i] = (int) d3;

                //取d余数,如200098,00098,...

                d %= d4;

                //整除,将d4的数量级减小,如:10000,1000,100,...

                d4 /= 10D;

            }

            //获得数值的长度

            int i1 = i;

            //转换后大写金额的长度

            int k = i1 * 2 - 1;

            //货币单位数组的长度

            int l = 17;

            for (i = i1 - 1; i >= 0; i--) {

                //将货币单位加到数组中,从数组中的最后一个值开始,如:分,角,...

                as2[k] = as1[l];
                k--;

                //将金额转换成大写并放到数组中,如,玖,捌,零,......

                as2[k] = as[ai[i]];
                k--;
                l--;
            }

            i1 *= 2;
            k = 0;
            l = 0;

            for (i = 0; i < i1; i++) {

                //判断数组中是否有零的值

                if (as2[i].compareTo("零") == 0) {

                    //判断是否到数组的最后一位

                    if (as2[i + 1] != null) {

                        //判断零后的字符是否为万,亿,元三个字符

                        if (as2[i + 1].compareTo("万") != 0
                                && as2[i + 1].compareTo("亿") != 0
                                && as2[i + 1].compareTo("元") != 0) {

                            as3[k] = as2[i];
                            i++;
                            k++;
                        } else {

                            i++;
                            as3[k] = as2[i];
                            k++;
                        }
                    }
                } else {
                    //生成新的数组,如,壹万捌千元整

                    as3[k] = as2[i];

                    k++;

                }

            }

            for (k = 0; as3[k] != null; k++) {

                //将金额数组中的零值替换为"_"

                if (as3[k].compareTo("零") == 0
                        && as3[k + 1] != null
                        && (as3[k + 1].compareTo("万") == 0
                                || as3[k + 1].compareTo("亿") == 0
                                || as3[k + 1].compareTo("元") == 0 || as3[k + 1]
                                .compareTo("零") == 0))

                    as3[k] = "_";

            }

            //将金额数组中的倒数第二个的零值替换为"_"

            if (as3[k - 1].compareTo("零") == 0)

                as3[k - 1] = "_";

            k = 0;
            i = 0;

            for (; as3[k] != null; k++) {

                //将数组中的"_"删除

                if (as3[k].compareTo("_") != 0) {
                    as2[i] = as3[k];

                    i++;
                }
            }

            i1 = i;

            //生成金额转换后的大写字符串

            for (int j = 0; j < i1; j++) {

                stringbuffer.append(as2[j]);

                if (as2[j].compareTo("亿") == 0
                        && as2[j + 1].compareTo("万") == 0)

                    as2[j + 1] = "";

            }
            String myflag = stringbuffer.toString().substring(
                    stringbuffer.length() - 1, stringbuffer.length());
            if (myflag.equals("元"))
                s = stringbuffer.append("整").toString();
            else
                s = stringbuffer.toString();

        }

        return prefix + s;
    }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值