• 实现数字转换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”  则会转换成 “伍万零零捌拾玖”

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

  • 相关阅读:
    【L.M.W.Y.D】Scrum Meeting 5
    【L.M.W.Y.D】Scrum Meeting 4
    多喝热水 实验十 团队作业6:团队项目用户验收&Beta冲刺
    多喝热水【Beta】Scrum meeting 4
    多喝热水【Beta】Scrum meeting 3
    多喝热水【Beta】Scrum meeting 2
    多喝热水【Beta】Scrum meeting 1
    多喝热水 实验九 团队作业5:团队项目编码与Alpha冲刺
    多喝热水 [Alpha] Scrum Meeting 7
    多喝热水 [Alpha] Scrum Meeting 6
  • 原文地址:https://www.cnblogs.com/xs104/p/3255310.html
Copyright © 2020-2023  润新知