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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kansyoukyou 中级黑马   /  2016-9-22 15:34  /  1204 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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]);      //人民币大写中零的添加,比如一千零一夜~~~~
                        }
            }      //可能字数太多超了限制了,我放到了三楼了~~~~~

9 个回复

倒序浏览
咦,内容太多了吗,下面那么多黑线
回复 使用道具 举报
   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语句基础上实现的转换了。
回复 使用道具 举报
厉害,又学习到了
回复 使用道具 举报
没人看么~~~~~~~
回复 使用道具 举报
骆宾王 来自手机 中级黑马 2016-9-22 21:42:29
地板
太厉害了
回复 使用道具 举报

哈哈~~~~花了好多时间才想明白的。
回复 使用道具 举报
gaol 发表于 2016-9-22 18:23
厉害,又学习到了

。。。。。。。。。
回复 使用道具 举报
感觉好复杂
回复 使用道具 举报

一开始面对的就是亿以上的位数,而且也只是在基础的java知识上实现的,如果能够从头到尾理解了,对java的认识也会更上一层的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马