美文网首页
java中阿拉伯数字转中文大写

java中阿拉伯数字转中文大写

作者: _Rondo | 来源:发表于2017-07-25 11:18 被阅读0次

    去相关银行业务的公司遇到的机试题常见的有两个,一个是写一个简单的存取款过程,另一个就是输入阿拉伯数字转大写了。

    对于存取款过程需要明白其业务逻辑,大致是先登录,登录成功后可以存取款,取款的时候判断金额大小。顺带一提,这里应该还有一个转账的问题,需要先判定转账的账户是否存在,再判断自己的金额是否不足,这里就不写了。

    对于第二个问题,那天同学也问了一句,闲暇时顺便也写了一下,代码如下:

    package com.test;
    /**
     * @author sxycw
     *  <p>简单的数字转大写</p>
     *  <p>这样的逻辑也可以用枚举实现</p>
     */
    public class NumberToCN {
        
        //自定义字符
        private static final String ling = "零";  
        private static final String[] zheng = {"圆","整"};  
    
        //定义大写中文数组
        private static final String[] cnArr = 
                { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };  
    
        //自定义单位数组
        private static final String[] danwei =
                {"", "拾", "佰", "仟" , "万" ,"拾" , "佰" ,"仟" , "亿" };
        private static final String[] units  = {"角","分"}; 
        
        //自定义转换方法
        public static String convert(String str){//168.789
            String xiaoshu = null;//小数
            String zhengshu = null;//整数
            String result = null;//拼接结果
            
            if(str!=null && str!=""){
                //转换double
                double d1 = Double.parseDouble(str);//168.789
                if(d1 > 0){
                    //四舍五入保留两位小数
                    String s1 = String.format("%.2f", d1);//168.79
                    //整数小数分离
                    String[] arr = s1.split("[.]");//["168","79"]
                    for (int i = 0; i < arr.length; i++) {
                        if(i<1){
                            zhengshu = arr[i];
                        }else{
                            xiaoshu = arr[i];
                        }
                    }
                    
                    //处理小数
                    String xiaoshu1 = null ;
                    if("00".equals(xiaoshu)){
                        //输入的为一个整数时
                        xiaoshu = zheng[1];//圆整
                    }else{
                        for (int i=0;i<xiaoshu.length();i++){
                            if(i<1){
                                xiaoshu1 = charToCn(xiaoshu.
                                        charAt(i))+units[0];//柒角
                            }else{
                                xiaoshu1 += charToCn(xiaoshu.
                                        charAt(i))+units[1];//玖分
                            }
                        }
                        xiaoshu = xiaoshu1;//柒角玖分
                    }
                    System.out.println(">>>小数部分---"+xiaoshu);
                    
                    //处理整数
                    String zhengshu1 = "";
                    if(zhengshu.length()>13){
                        return "输入的数字过大!";
                    }else{
                        for (int i = 0; i < zhengshu.length(); i++) {
                            if("零".equals(charToCn(zhengshu.charAt(i)))){
                                //为0省略单位
                                zhengshu1+="零";
                            }else{
                                zhengshu1 += charToCn(zhengshu.charAt(i))+
                                        danwei[zhengshu.length()-1-i];//壹佰陆拾捌
                            }
                        }
                        zhengshu = zhengshu1+zheng[0];//壹佰陆拾捌圆
                    }
                    System.out.println(">>>整数部分---"+zhengshu);
                    
                    //拼接结果
                    result = zhengshu + xiaoshu;
                    System.out.println(">>>拼接结果---"+result);
                    
                }else{
                    return "输入的数字不合法!";
                }
                return result;
            }else{
                return "请输入一个数字";
            }
        }
        //char转整int,再转String
        public static String charToCn(char c){
            String result = null;
            int c1 =  Integer.parseInt(String.valueOf(c));
            for (int i = 0; i < cnArr.length; i++) {
                if(i == c1){
                    result = cnArr[i];
                }
            }
            return result;
        }
        public static void main(String[] args) {
            //初始化输入值
            String str = "168.789";
            convert(str);
        }
    }
    

    注意!这个代码还有一些问题,如100008的时候需要省根据0的个数省略相关的"零",还需要对单位万进行二次判断,这里先记下来,待完善。

    -end-

    相关文章

      网友评论

          本文标题:java中阿拉伯数字转中文大写

          本文链接:https://www.haomeiwen.com/subject/jagekxtx.html