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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



import java.util.Arrays;
public class Num2Rmb{
        private String[] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" ,"伍" , "陆" , "柒" , "捌" , "玖"};
        private String[] unitArr = {"十" , "百" , "千"};
        /**
         * 把一个浮点数分解成整数部分和小数部分字符串
         * @param num 需要被分解的浮点数
         * @return 分解出来的整数部分和小数部分。第一个数组元素是整数部分,第二个数组元素是小数部分。
         */
        private String[] divide(double num){
                // 将一个浮点数强制类型转换为long,即得到它的整数部分
                long zheng = (long)num;
                // 浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数
                long xiao = Math.round((num - zheng) * 100);
                // 下面用了2种方法把整数转换为字符串
                return new String[]{zheng + "", String.valueOf(xiao)};
        }
        /**
         * 把一个四位的数字字符串变成汉字字符串
         * @param numStr 需要被转换的四位的数字字符串
         * @return 四位的数字字符串被转换成的汉字字符串。
         */
        private String toHanStr(String numStr){
                String result = "";
                int numLen = numStr.length();//返回numStr的长度
                // 依次遍历数字字符串的每一位数字
                for (int i = 0 ; i < numLen ; i++ ){
                        // 把char型数字转换成的int型数字,因为它们的ASCII码值恰好相差48
                        // 因此把char型数字减去48得到int型数字,例如'4'被转换成4。
                        int num = numStr.charAt(i) - 48;
                        // 如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)
                        if ( i != numLen - 1 && num != 0){
                                result += hanArr[num] + unitArr[numLen - 2 - i];
                        }
                        // 否则不要添加单位
                        else{
                                result += hanArr[num];
                        }                       
                }
                return result;               
        }

    public static void main(String[] args){
                Num2Rmb nr = new Num2Rmb();
                // 测试把一个浮点数分解成整数部分和小数部分
                System.out.println(Arrays.toString(nr.divide(200.5)));
                // 测试把一个四位的数字字符串变成汉字字符串
                System.out.println(nr.toHanStr("0690"));
    }
}


结果:
[200, 50]
零陆百玖十零


怎么去前后的零 求老师同学们帮忙解决下, 完成这代码

6 个回复

正序浏览
本帖最后由 江海豪 于 2015-10-1 21:26 编辑

好久没上论坛了 , 今天把答案发出来(上次没解决这次解决了) 让大家说说那里还能修改的呢 ,我可能写的不太好import java.util.Arrays;
public class Num2Rmb
{
        private String[] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" ,
                "伍" , "陆" , "柒" , "捌" , "玖",};
        private String[] unitArr = {"十" , "百" , "千"};
        
        private String toHanStr(String numStr)
        {
                String result = "";
                int numLen = numStr.length();
                // 依次遍历数字字符串的每一位数字
                for (int i = 0 ; i < numLen ; i++ ){
                        // 把char型数字转换成的int型数字,因为它们的ASCII码值恰好相差48
                        // 因此把char型数字减去48得到int型数字,例如'4'被转换成4。
                        int num = numStr.charAt(i) - 48;
                        if(result.length()==0&&num==0){
                                continue;
                        }else if(result.length()!=0&&num==0){
                                if(result.charAt(result.length()-1)=='零'){
                                        continue;
                                }
                        }
                        // 如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)
                        if ( i != numLen - 1 && num != 0){
                                result += hanArr[num] + unitArr[numLen - 2 - i];
                        }
                        // 否则不要添加单位
                        else{
                                result += hanArr[num];
                        }
                }
                if(result.charAt(result.length()-1)=='零'){
                        result=result.substring(0, result.length()-1);
                }
               
                return result;
        }
        public static void main(String[] args)
    {
                Num2Rmb nr = new Num2Rmb();
                // 测试把一个四位的数字字符串变成汉字字符串
                System.out.println(nr.toHanStr("0050"));
    }
}






回复 使用道具 举报
。。。。。。。。。。。。。。
回复 使用道具 举报
如果是你这种方法,一个一个字符换算的话,也是删除所有前边的零,但是后边的零不能随便处理,因为如果是06090000,我觉得还是尽量用除法和取余的方法做
回复 使用道具 举报
感觉如果把数字0690转成汉字的时候用/的方法是不好一些,先把字符串前边的所有0去掉,690然后/100,得到6,690-600=90,90/10=9,90-90=0,个位为0就不做翻译了.肯定是要在变换成汉字之前进行处理的.
回复 使用道具 举报
好棒啊  我今天下午刚思考这个问题 你就写出来了!
回复 使用道具 举报
我想了一个下午都没想出来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马