黑马程序员技术交流社区

标题: Java基础上实现的数字转换 [打印本页]

作者: kansyoukyou    时间: 2016-9-22 15:34
标题: Java基础上实现的数字转换
本帖最后由 kansyoukyou 于 2016-9-22 15:38 编辑

将数字转换为人民币的大写格式------
稍微向下就能明白这个程序其实应用的很广泛的,java的可移植性很高的语言,在涉及到现实生活的与支付交易相关的场景中,这段不起眼的小程序或许有挺多的应用。
刚自学java的时候,总是想当然的以为会提供有直接的工具或者程序,可惜后来发现不是,刚开始无从下手,后来想到提取每个位数上的数字,然后进行相应的替换,于是从个位起开始编写替换的方法,写到万的时候崩溃了,因为后面随着位数的升高涉及到的低位数是否为0的判断越多以及前一位的考虑。看了网上很多其他人的代码,一个也是用基础的方法成功实现的方法吸引了我,在这之中,对于java的除法和取余的运算的理解也有了很大的提升。
这里以亿以上的数字为例,截取部分代码说下单纯的利用嵌套的if循环和for循环以及java的除法和取余的运算转换。

//先创建好用于替换的字符数组      
private static String[] NUMBER1 = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒","捌", "玖" };
private static String[] NUMBER2 = { "零", "拾", "佰", "仟", "万", "亿" };



----------------先说“万”以下的数字转换--------------------------
public static String sonhaihai(int num){   //万以下的数字转换方法
            if(num>9999||num<0){
                    return "";               //先将万以上的数字排除
            }
            int q=num/1000;           //变量q,用于接收千位上的值,了解java的整数除法运算就可。
            int b=(num/100)%10;    //变量b,这里注意的是在和100进行除法运算后,要再次和10进行取余,举个例子,b是用来存储百位上的数字的,
                                                    //只要num大于1000,num/100得出的值就必定是,大于10的,要得到百位上的数字,就必须对10进行取余运算。
        int s=(num/10)%10;    // 这就同理了。
            int g=num%10;
            StringBuffer sb=new StringBuffer();      //创立字符串缓冲对象sb。
            if(q>0){
                    sb.append(NUMBER1[q]);     //将对应数字替换为字符数组中的人民币大写字符,对各种可能的数字情况进行不同的处理,举个例子,
                    sb.append(NUMBER2[3]);     //假如  方法中传入  922这个数字,那么q=0,当前这条语句就不会执行了。
            }
            if(b>0){
                    sb.append(NUMBER1);
                    sb.append(NUMBER2[2]);
            }else {                                                              
                        if (q != 0) {
                                sb.append(NUMBER2[0]);      //人民币大写中零的添加,比如一千零一夜~~~~
                        }
            }      //可能字数太多超了限制了,我放到了三楼了~~~~~

作者: kansyoukyou    时间: 2016-9-22 15:35
咦,内容太多了吗,下面那么多黑线
作者: kansyoukyou    时间: 2016-9-22 15:36
   if(s>0){
                    sb.append(NUMBER1);
                    sb.append(NUMBER2[1]);
            }else{
                    if(b!=0){
                            sb.append(NUMBER2[0]);
                    }
            }
            if(g>0){
                    sb.append(NUMBER1[g]);
            }
            return sb.toString();
            }

-------接下就是万到亿以及亿元以上的数字转换了-----------
        int split=10000;               //用于判断亿元级的标识符,以此为单位得出亿元到万元位上的 数值
            int y=num/(split*split);       //与亿元相除,得出亿元上的值
            int w=(num/split)%split;        //与万元相除,并和万元求余得出万元位上的值
            int g=num%split;               //与万元求余,得出所有万元以下数值

基础思路将“万”作为基础值去做除法和取余运算。


以上就是不用超过基础知识,单纯的除法和取余以及if语句基础上实现的转换了。

作者: gaol    时间: 2016-9-22 18:23
厉害,又学习到了
作者: kansyoukyou    时间: 2016-9-22 20:17
没人看么~~~~~~~
作者: 骆宾王    时间: 2016-9-22 21:42
太厉害了
作者: kansyoukyou    时间: 2016-9-23 17:44
骆宾王 发表于 2016-9-22 21:42
太厉害了

哈哈~~~~花了好多时间才想明白的。
作者: kansyoukyou    时间: 2016-9-23 17:46
gaol 发表于 2016-9-22 18:23
厉害,又学习到了

。。。。。。。。。
作者: changfa    时间: 2016-9-23 18:04
感觉好复杂
作者: kansyoukyou    时间: 2016-9-23 19:21
changfa 发表于 2016-9-23 18:04
感觉好复杂

一开始面对的就是亿以上的位数,而且也只是在基础的java知识上实现的,如果能够从头到尾理解了,对java的认识也会更上一层的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2