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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.itheima;
/*
* 10、  金额转换,阿拉伯数字转换成中国传统形式。
例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
*/
public class Test10 {
/*
* 思路:        1.将输入的long型变量lon转化成字符串
*                 2.根据字符串长度生成相应的子字符串,9-13位分成三个子字符串,分别代表 亿级、万级、个级
*                   5-8位分成二个子字符串,分别代表 万级、个级,1-4位用原字符串
*                 3.定义方法,将子字符串传承int型数组
*                 4.定义方法,利用查表法,根据规则读int数组
*/
       
        public static void main(String[] args) {
                convert(9805300187023L);// 99009-0009-9901
        }
       
        static void convert(long lon)//本方法只考虑万亿以内的,即输入数字最多为13位
        {
                if(lon>9999999999999L) //超出范围则抛出异常
                        throw new RuntimeException("输入数字超出范围");
                String str=lon+"";
               
//                根据字符串长度生成相应的子字符串,9-13位分成三个子字符串,分别代表 亿级、万级、个级
//                5-8位分成二个子字符串,分别代表 万级、个级,1-4位用原字符串
                if(str.length()>8){
                        String s1=str.substring(str.length()-4, str.length());
                        String s2=str.substring(str.length()-8, str.length()-4);
                        String s3=str.substring(0, str.length()-8);
                        int[] arr1=toIntArr(s1);//调用方法将子字符串传承int型数组
                        int[] arr2=toIntArr(s2);
                        int[] arr3=toIntArr(s3);
                        StringBuilder sb=new StringBuilder();
                        if(s2.equals("0000"))
                                sb.append(toString(arr3)+"亿"+"零"+toString(arr1)+"圆整");
                        else
                                sb.append(toString(arr3)+"亿"+toString(arr2)+"万"+toString(arr1)+"圆整");
                        System.out.println(sb);
                }else if((str.length()>4)&&(str.length()<=8)){
                        String s1=str.substring(str.length()-4, str.length());
                        String s2=str.substring(0, str.length()-4);
                        int[] arr1=toIntArr(s1);
                        int[] arr2=toIntArr(s2);
                        StringBuilder sb=new StringBuilder();
                        sb.append(toString(arr2)+"万"+toString(arr1)+"圆整");
                        System.out.println(sb);
                }else{
                        String s1=str;
                        int[] arr1=toIntArr(s1);
                        StringBuilder sb=new StringBuilder();
                        sb.append(toString(arr1)+"圆整");
                        System.out.println(sb);
                }
       
        }
//        定义方法,将子字符串传承int型数组
        static int[] toIntArr(String s){
                int [] arr=new int[s.length()];
                for(int x=0;x<arr.length;x++){
                        arr[x]=Integer.parseInt(s.charAt(x)+"");
                }
                return arr;
        }
//        定义方法,利用查表法,根据规则读int数组
        //根据读数字的规则,各种判断
        static String toString(int []arr){
                char[] num={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖',};
                char[] mul={'拾','佰','仟','万','亿'};
                StringBuilder builder=new StringBuilder();
                for(int i=arr.length-1;i>-1;i--){
                        if(i==arr.length-1){
                                if(arr[arr.length-1]!=0)
                                builder.append(""+num[arr[arr.length-1]]);
                        }else if(i<arr.length-1){
                                if(arr[i]!=0)
                                        builder.append(mul[arr.length-2-i]+""+num[arr[i]]);
                                if((arr[i]==0)&&(arr[i+1]!=0))
                                        builder.append("零");
                                }
                }
                return new String(builder.reverse());
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马