zoukankan      html  css  js  c++  java
  • 实现数字转换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”  则会转换成 “伍万零零捌拾玖”

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

  • 相关阅读:
    JeePlus:代码生成器
    JeePlus:API工具
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
  • 原文地址:https://www.cnblogs.com/xs104/p/3255310.html
Copyright © 2011-2022 走看看