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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.itheima;


/**
* 第十题:
* 金额转换,阿拉伯数字转换成中国传统形式。
*  例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
* @author Frank
*
*/
public class Test10 {
    public static void main(String[] args){
            long number = 1210000142;
            System.out.println("原始数字:" + number);
            String chinaNumber = convertChinaNumber(Long.toString(number));
        System.out.println("    转换后:" + chinaNumber);
    }
    public static String convertChinaNumber(String number){
            //定义字符数组存储中国数字写法格式
            final char[] chineseNumber = new char[]
            { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
            //定义字符数组存储中国数字的单位
            final char[] units = new char[]
            { '圆', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟'};           
            //定义字符数组接收输入的数字
            char[] chrNumber  = number.toCharArray();            
            int[] intNumber = new int[chrNumber.length];        //将字符数组转成整型数组              
            changInt(chrNumber,intNumber);
            StringBuffer sb = new StringBuffer();                //用于存储转换后的字符串
            
            for(int i = 0; i < chrNumber.length; i++){
                    if(intNumber[i] == 0 && i==0){          //判断如果个位上的数字为0添加圆
                            sb.append(units[intNumber[i]]);       
                    }
                    if(intNumber[i] == 0 && i!= 0){   //判断除了个位数其他位数为0则添加零     
                            sb.append(chineseNumber[0]);   
                            //如果万位前后都是零,这里把万字添加,否则会少了万
                            if(i==4){
                                    sb.append(units[i]);
                            }
                            //如果亿位前后都是零,这里把亿字添加
                            if(i== 8){
                                    sb.append(units[i]);
                            }
                    }
                    if(intNumber[i] != 0){        //判断如果位数上不是零,按照定义的中文字典对应添加到字符串中
                            sb.append(units[i]);        //添加单位
                            sb.append(chineseNumber[intNumber[i]]);        //添加数字格式
                    }
                           
            }
            sb.reverse();        //将字符串反转
            //将对于的零去除
            String chinaNumber = sb.toString().replaceAll("零+", "零").replaceAll("零+万", "万")
                                                    .replaceAll("零+亿", "亿").replaceAll("亿万零", "亿零")+"整";
            return chinaNumber;

    }
   
    /**
     * 转换成整型数组
     * @param chrNumber
     * @param intNumber
     */
    public static void changInt(char[] chrNumber,int[] intNumber){
            for(int k = chrNumber.length-1,j=0;k >= 0; k--,j++ ){
                String num = Character.toString(chrNumber[k]) ;
                intNumber[j] = Integer.parseInt(num);
        }
    }

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马