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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 zhanghua 于 2011-11-15 14:08 编辑

这个程序将数字转换成人民币大写的形式
如:1000001
壹佰万零壹元整


public class AmountInWords {
        private String result="";
        private String[] wordsArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        private String[] unitArr={"拾","佰","仟","万","亿"};
        /**
         * 把一个浮点数分解成整数和小数部分字符串
         */
//        private String getDecimalWords(String decimal){
//               
//        }
       
        /**
         * 将特殊位前的零去掉
         */
       
        void throwZero(){
                result=result.substring(0, result.length()-1);
        }
       
        /**
         * 增加单位
         */
       
        void addUnit(int po){
                if(po==8){
                        result+=unitArr[4];
                }else if(po==4){
                        result+=unitArr[3];
                }
                else if(po==3||po==7){
                        result+=unitArr[2];
                }else if(po==2||po==6){
                        result+=unitArr[1];
                }else if(po==1||po==5){
                        result+=unitArr[0];
                }else if(po==0){
                        result+="元";
                }
               
        }
       

        /**
         * 判断在特殊位上前面是否为零
         */
        private boolean frontIsZero(int po) {
                int len = result.length() - 1;

                if (result.charAt(len) == '零') {
                        return true;
                }
                return false;
        }
       
        private String[] divide(String numStr){
                if(numStr.contains(".")){
                        String[] arr=numStr.split("\\.");
                        return arr;
                }
                return new String[]{numStr,""};
        }
        //负责整的转换,
        private String toWords(String numStr){
                String[] arr=divide(numStr);
                //去掉多余的零
                String temp=Integer.parseInt(arr[0])+"";
                integerWords(temp);
                String decimal=decimalWords(arr[1]);
                if(decimal.length()!=0){
                        result=result+decimal;
                }else{
                        result=result+"整";
                }
                return result;
        }
       
        /**
         * 把一个整数数字转换为大写数字
         */
        String integerWords(String numStr){
                //用作标识出现零的次数是否连续
                boolean flag=true;
                for(int i=0;i<numStr.length();i++){
                       
                        int digit=numStr.charAt(i)-48;
                        int po=numStr.length()-1-i;
                        //如果不是最后一位数字,而且数字不是零,则需要添加单位
                        if(i!=numStr.length()-1&&digit!=0){
                                flag=true;
                                result+=wordsArr[digit];
                                addUnit(po);
                        }else if(po==8){
                                //判断是否在特殊位置上        应该判断特殊位前边是否为零,如果为零应先载取,再进行增加单位
                                addUnit(po);
                        }
                        else if(po==4){
                       
                                if(frontIsZero(po)){
                                throwZero();
                                }
                                //去掉零之后,应该将标识设置为true代表已经没有零
                                flag=true;
                                addUnit(po);
                        }
                        else if(po==0){
                                //因为前边没有将最后一位添加上去,所以下边将进行添加,而且,已经到了最后一位,如果最后一位前边是零应该截取掉,并且最后一位也不为零
                                if(digit!=0){
                                        result+=wordsArr[digit];
                                }
                       
                                if(frontIsZero(po)){
                                        throwZero();
                                        }
                                addUnit(po);
                        }
                        else {
                                if(flag){
                                        flag=false;
                                result+=wordsArr[digit];
                                }
                        }
                }
                return result;
               
        }
       
        String  decimalWords(String decimalStr){
                String decimalWrods="";
                String[] decimalUnit={"角","分"};
                for(int i=0;i<decimalStr.length();i++){
                        int digit=decimalStr.charAt(i)-48;
                        if(digit==0&&i==0){
                                decimalWrods="零";
                        }else{
                                decimalWrods=decimalWrods+wordsArr[digit]+decimalUnit;
                        }
                }
                return decimalWrods;
        }
        public static void main(String[] args) {
                AmountInWords amount=new AmountInWords();
                amount.toWords("1000001");
                System.out.println(amount.result);
        }
}

评分

参与人数 1技术分 +2 收起 理由
admin + 2 赞一个!

查看全部评分

6 个回复

倒序浏览

class num
{
        //大写金额
        private static char[] NUMBER_CHAR = "零壹贰叁肆伍陆柒捌玖".toCharArray();
        //金额单位
        private static char[] UNIT_CHAR = "元拾佰仟万拾佰仟亿拾佰仟".toCharArray();

        public static String convert(int amount)
        {
                StringBuffer amountStr = new StringBuffer();

                if(amount > 9)
                {
                        //当前位置
                        int pos = 0;
                        //当前位置所表示的值
                        int digit = amount % 10;
                        //上一位置所表示的值
                        int preDigit = -1;

                        while(amount > 0)
                        {
                                //如果个位为0的话则只输出单位
                                if(pos == 0 && digit == 0)
                                {
                                        amountStr.insert(0, UNIT_CHAR[pos]);
                                }
                                else
                                {
                                        //如果位置为万或者为亿的位置,就算当前位置值为0也要输出
                                        //如12,000,675
                                        if((pos == 4 || pos ==8) && digit == 0)
                                        {
                                                amountStr.insert(0, UNIT_CHAR[pos]);
                                        }
                                        else
                                        {
                                                //如果上一个位置与当前位置的值不同时为0的情况下
                                                //过滤掉重复的0
                                                if(digit != 0 || preDigit != 0)
                                                {
                                                        //如果当前位置为0上一个位置不为0的情况下,则只输出数字,不需要单位
                                                        if(digit == 0 && preDigit != 0)
                                                        {
                                                                amountStr.insert(0, NUMBER_CHAR[digit]);
                                                        }
                                                        else
                                                        {
                                                                amountStr.insert(0, UNIT_CHAR[pos]);
                                                                amountStr.insert(0, NUMBER_CHAR[digit]);
                                                        }
                                                }
                                        }       
                                }

                                amount = amount / 10;
                                pos++;
                                preDigit = digit;
                                digit = amount % 10;
                        }
                        return amountStr.toString().replaceAll("亿万", "亿");
                }
                else
                {
                        return amountStr.append(NUMBER_CHAR[amount]).append(UNIT_CHAR[0]).toString();
                }
        }

        public static void main(String[] args)
        {
                //备注:在这里就不对参数进行检验,即默认传过来的参数是正确的金额
                //Java教程:http://www.javaweb.cc
                System.out.println(convert(2223));
                System.out.println(convert(100324500));
        }
}
回复 使用道具 举报
这个挺有用,先收藏了,谢谢
回复 使用道具 举报
杨杰 黑马帝 2011-11-19 22:38:45
板凳
这个绝对很有用,必须收藏!!!
回复 使用道具 举报
有才{:soso_e128:}
回复 使用道具 举报
学习了,收藏!!!
回复 使用道具 举报
灵感 高级黑马 2012-7-23 14:43:38
7#
很实用,很给力
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马