A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2013-4-6 13:19  /  13833 人查看  /  33 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static String[] cn={"", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"};

当超过8位,也就是在亿以上的时候,又回来循环赋值

当你在各个单位前面赋上零的时候,要处理,将“零拾”,“零佰”等等用零替换,
最后处理连续出现的“零”为一个“零”
……
需要源代码可以给你一个

评分

参与人数 2技术分 +2 收起 理由
滔哥 + 1 多送你1分做为论坛参与奖。
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
李大伟 发表于 2013-4-8 14:16
需要啊 ,看看,谢谢了

public class Test10 {
        public static void main(String[] args) {
                /*由于直接用整数表示要转换的大数不好表示,所以,将式子表示成字符串型*/
                String moneyString = "101000000010";
               
                System.out.println(transform(moneyString));
        }

        /**
         *
         * @param moneyString 传入的待转换字符串
         * @return 转换好的字符串
         */
        public static String transform(String moneyString) {
                /* 定义中文大写的数组 */
                String[] chineseUpcase = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌",
                                "玖" };

                /* 定义换算单位 */
                String[] unit = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿" };

                StringBuilder builder = new StringBuilder();

                /**
                 * 依次替换数字为大写,并给每位赋一个单位
                 */
                for (int i = 0; i < moneyString.length(); i++) {
                        /*
                         * 按照出现的数字,依次替换成大写汉字,在ASCII码中,数字0对应的字符编码是48,
                         * 所以,得到了字符,就应该减去48以换算成相应的数字值
                         */
                        builder.append(chineseUpcase[moneyString.charAt(i) - 48]);
                }

                int pointer = 1;
                for (int j = moneyString.length() - 1; j > 0; j--) {
                        /* 从最低位开始依次在每位后面加上各自代表的位数,拾位,佰位,仟位等 */
                        builder.insert(j, unit[pointer++]);
                        /* 在亿位之后又重新开始循环 */
                        if (pointer == 9)
                                pointer = 1;
                }

                /**
                 * 对出现的零和单位的特殊情况做处理
                 *
                 *replace(int start,int end,String str)
                                        start - The beginning index, inclusive.
                                        end - The ending index, exclusive.
                                        str - String that will replace previous contents.
                 */
                /* 当十位为零时,用"零"代替"零拾" */
                while (builder.indexOf("零拾") != -1) {
                        builder.replace(builder.indexOf("零拾"), builder.indexOf("零拾") + 2, "零");
                }

                /* 当百位为零时 */
                while (builder.indexOf("零佰") != -1) {
                        builder.replace(builder.indexOf("零佰"), builder.indexOf("零佰") + 2, "零");
                }

                /* 仟位为零 */
                while (builder.indexOf("零仟") != -1) {
                        builder.replace(builder.indexOf("零仟"), builder.indexOf("零仟") + 2, "零");
                }

                /* 万位为零,需要保留“万”*/
                while (builder.indexOf("零万") != -1) {
                        builder.replace(builder.indexOf("零万"), builder.indexOf("零万") + 2, "万");
                }

                /* 亿位为零 */
                while (builder.indexOf("零亿") != -1) { // 同上
                        builder.replace(builder.indexOf("零亿"), builder.indexOf("零亿") + 2, "亿");
                }

                /********* 特殊情况,当有亿和万碰到一起的时候,如:100002345 **********/
                while (builder.indexOf("亿万") != -1) {
                        builder.replace(builder.indexOf("亿万"), builder.indexOf("亿万") + 2, "亿零");
                }
               
                /* 有连续的零时,保留一个零 */
                while (builder.indexOf("零零") != -1) {
                        builder.replace(builder.indexOf("零零"), builder.indexOf("零零") + 2, "零");
                }

                /* 当结尾为零时,不显示,经过上面对“零零”的处理,只可能出现一个零 */
                while (builder.lastIndexOf("零") == builder.length() - 1) {
                        /*这里的参数,end,最好不要写成builder.length,防止方法移动后,后面添加的东西也被删除了*/
                        builder.delete(builder.lastIndexOf("零"), builder.lastIndexOf("零") + 1);
                }
                builder.append("圆整");
               
                return builder.toString();
        }
}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马