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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

金额转换,阿拉伯数字转换成中国传统形式。例如:101000001010 转换为壹仟零壹拾亿零壹仟零壹拾圆整

1 个回复

倒序浏览
这道题略坑,没有太直接的办法,加了注释,看你理解了
public class Test16 {

        public static void main(String[] args) {
                //long l = 101000001010L;
                Scanner sc = new Scanner(System.in);
                long l = Long.parseLong(sc.nextLine());
                sc.close();
                format(l);
               
        }

        public static void format(long l) {
                ArrayList<Integer> list = new ArrayList<>();                //创建集合,接收传入数据拆分成若干个四位数
                while(l > 0) {
                        int num = (int) (l % 10000);
                        list.add(num);
                        l /= 10000;
                }
               
                StringBuilder sb = new StringBuilder();                        //用来存储最终转换的结果
               
                for(int i = 0; i < list.size(); i++) {
                        StringBuilder sb1 = new StringBuilder();                //用来存储每个四位数转换的结果
                       
                        if(list.get(i) != 0) {                        //当该四位数不为0时,调用change()方法将该数据转成对应的中文形式
                                int ge = list.get(i) % 10;
                                int shi = list.get(i) / 10 % 10;
                                int bai = list.get(i) / 10 / 10 % 10;
                                int qian = list.get(i) / 10 / 10 / 10 % 10;
                               
                                change(qian, sb1 ,"千");                //将千位的数字转换为中文格式,并加上千
                                change(bai, sb1 ,"百");                //将百位的数字转换为中文格式,并加上百
                                change(shi, sb1 ,"十");                //将十位的数字转换为中文格式,并加上十
                                change(ge, sb1 , "");                //将个位的数字转换为中文格式
                               
                                if(i == 1) {               
                                        sb1.append("万");                //如果是第二个四位数,则加上 万
                                }else if(i == 2) {
                                        sb1.append("亿");                //如果是第三个四位数,则加上 亿
                                }
                        }else {                        //当四位数为0,如果第一个四位数和第三个四位数都不为零时,则加上 零,其他情况则为空
                                if(i == 1 && list.get(0) != 0 && list.get(2) != 0)                
                                        sb1.append("零");
                        }
                       
                        String str = sb1.toString().replaceAll("(.)\\1+", "$1");        //将重复出现的零转换成一个零
                        str = str.startsWith("零") ? str.substring(1) : str;                        //如果字符串以零开头,则删除这个零
                        sb.insert(0, str);                        //将获得的字符串存储在字符串缓冲区的最前面
                }
                System.out.println(sb + "元");
        }

        //将数字转换成对应的中文形式
        public static void change(int num, StringBuilder sb,String s) {
                switch (num) {
                case 9:
                        sb.append("九");
                        break;
                case 8:
                        sb.append("八");
                        break;
                case 7:
                        sb.append("七");
                        break;
                case 6:
                        sb.append("六");
                        break;
                case 5:
                        sb.append("五");
                        break;
                case 4:
                        sb.append("四");
                        break;
                case 3:
                        sb.append("三");
                        break;
                case 2:
                        sb.append("二");
                        break;
                case 1:
                        sb.append("一");
                        break;
                case 0:
                        if(!"".equals(s))                //不为个位时添加 零
                                sb.append("零");
                        break;
                }
                if(num != 0)                        //当传入的数字不为0时,则再加上相应的 千 百 十
                        sb.append(s);               
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马