实现数字转换RMB大写

题目:实现的功能将数字“673”转换成“陆佰柒拾叁” “3681”转换成“叁仟陆佰捌拾壹” “8007”转换成“捌仟零柒”

思路:主要使用了数组和循环来实现

代码雏形

package com.test.array;

public class Num2RMB2 {
    private static String[] han = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒",
            "捌", "玖" };    //准备转换的汉字
    private String[] unit = { "万" , "仟" , "佰" , "拾" ,"个"};        //准备单位

    private String Num2Rmb(String str){
        int strLength = str.length();    //首先先获得传入字符串的长度

        String n = "";    //定义一个空字符串,用来接收最后形成的结果
        /**
         * 因为不确定要输入的数字是多少位,所以从后往前开始转换
         * <1>数字的长度为strLength,所以从第strLength-1位(也就是从最小一位)开始转换
         * <2>str.charAt函数可以获得字符串索引处的char值,然后再减去48,将该char转换为数字
         * <3>因为个位数是不需要单位的,需要用i!=strLength-1来做判断,如果是最后一位,则不加单位
         * <4>最后再将转换后的数字添加上单位连接起来
         */
            for(int i=strLength-1;i>=0;i--){    //<1>    

                int index = str.charAt(i)-48;    //<2>            
                    if(i!=strLength-1){        //<3>
                        n = han[index]+ unit[i] + n ;        //<4>
                    }else{
                        n = han[index]+ n ;
                    }
            }        
        return n;
    }

    public static void main(String[] args) {
        Num2RMB2 num2rmb = new Num2RMB2();
        String daxie = num2rmb.Num2Rmb("56089");
        System.out.println(daxie);
    }
}

上面的代码还存在问题,例如这样的数字“10256” 则会转换成“壹万零仟贰佰伍拾陆”,所以这时候还需要在转换的时候做一个判断,如果该处的数字为0,也不加单位
所以上面的代码修改为

package com.test.array;

public class Num2RMB2 {
    private static String[] han = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒",
            "捌", "玖" };    //准备转换的汉字
    private String[] unit = { "万" , "仟" , "佰" , "拾" };        //准备单位

    private String Num2Rmb(String str){
        int strLength = str.length();    //首先先获得传入字符串的长度

        String n = "";    //定义一个空字符串,用来接收最后形成的结果
        /**
         * 因为不确定要输入的数字是多少位,所以从后往前开始转换
         * <1>数字的长度为strLength,所以从第strLength-1位(也就是从最小一位)开始转换
         * <2>str.charAt函数可以获得字符串索引处的char值,然后再减去48,将该char转换为数字
         * <3>因为个位数是不需要单位的,需要用i!=strLength-1来做判断,如果是最后一位,则不加单位
         * <4>最后再将转换后的数字添加上单位连接起来
         */
            for(int i=strLength-1;i>=0;i--){    //<1>    

                int index = str.charAt(i)-48;    //<2>            
                    if(i!=strLength-1 && index!=0){        //<3>
                        n = han[index]+ unit[i] + n ;        //<4>
                    }else{
                        n = han[index]+ n ;
                    }
            }        
        return n;
    }

    public static void main(String[] args) {
        Num2RMB2 num2rmb = new Num2RMB2();
        String daxie = num2rmb.Num2Rmb("56089");
        System.out.println(daxie);
    }
}

这个时候基本上就已经差不多了,但是还存在问题,加入说数字为“50089” 则会转换成 “伍万零零捌拾玖”

所以说还需要做判断(待续)

Copyright© 2020-2022 li-xyz 冀ICP备2022001112号-1