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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.util.Scanner;
public class MoneyTrant
{
        public static void main(String[] args){
                Scanner in = new Scanner(System.in);
                while(true){
                        System.out.println("请输入你要转换的货币金额");
                        String money = in.next();
                        if(money.equalsIgnoreCase("over"))
                                break;
                        long moneyNumber = Long.parseLong(money);
                        trant(moneyNumber);
                }
        }
        public static void trant(Long moneyNumber){
                char[] chineseNumber = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
                char[] units = new char[]{'元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟'};
                int index = 0;
                long lastNumber = 0;
                StringBuilder sb = new StringBuilder();
                while(moneyNumber !=0){
                        lastNumber = moneyNumber%10;
                        sb.insert(0,units[index++]);
                        sb.insert(0,chineseNumber[(int)lastNumber]);

                        moneyNumber = moneyNumber/10;
                }
                String money = sb.toString().replaceAll("零[拾佰仟]","零").replaceAll("零+亿","亿").replaceAll("零+万","零").
                        replaceAll("零+元","元");
                System.out.println(money);
        }
}
各位大神,代码可以复制运行就可以了,求指出其中的bug,有问题,我测试了,想的不多,还望多多指正
版主,帖子不要那么快分类好吗?我是想看看各位给的程序漏洞

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

7 个回复

倒序浏览
金额转换,阿拉伯数字转换成中国传统形式。
例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
----------------------
这是原题目

回复 使用道具 举报
下面是我的修改::
import java.util.Scanner;
public class MoneyTrant
{
        public static void main(String[] args){
                Scanner in = new Scanner(System.in);
                while(true){
                        System.out.println("请输入你要转换的货币金额");
                        String money = in.next();
                        if(money.equalsIgnoreCase("over"))
                                break;   
                        try{                       
                            long moneyNumber = Long.parseLong(money);
                            trant(moneyNumber);
                        }catch(Exception e){
                          throw new RuntimeException("非法数字");
                        }     
                }
        }
        public static void trant(Long moneyNumber){
                char[] chineseNumber = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
                char[] units = new char[]{'元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟'};
                int index = 0;
                long lastNumber = 0;
                StringBuilder sb = new StringBuilder();
                while(moneyNumber !=0){
                        lastNumber = moneyNumber%10;
                        sb.insert(0,units[index++]);
                        sb.insert(0,chineseNumber[(int)lastNumber]);
                        moneyNumber = moneyNumber/10;
                }
                String money = sb.toString().replaceAll("零[拾佰仟]","零").replaceAll("零+亿","亿").replaceAll("零+万","零").
                        replaceAll("零+元","元");
                System.out.println(money);
        }
}
我认为需要判断下是否是数字类型,万一输入非法字符的情况呢,所以加一个异常捕获最佳。。。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
小数不可以转换,

Exception in thread "main" java.lang.NumberFormatException: For input string: "2
5.3"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.
java:65)
        at java.lang.Long.parseLong(Long.java:441)
        at java.lang.Long.parseLong(Long.java:483)
        at MoneyTrant.main(MoneyTrant.java:12)
回复 使用道具 举报
这个数转换结果不正确

1000000205
壹拾亿零零贰佰零伍元
回复 使用道具 举报
这道题我解了,越到最后发现麻烦越多.后来我想明白了必须要解决这几点.
第一:零的处理,中间多个零,或尾部多个.
第二:插入金额单元问题.如果有中间有多个零,超过4个,万是不需要的.
第三:关于千百十,万亿十亿,这样的单位,怎么插才不会错.
真不能用正则缺什么替换什么,只有全部系统的把所有问题全解决,这道题才行.
后起我想了一个办法,把一个字符给切成四个数字每段,再分别处理.
1010
0000
1010
然后每个分别插入:千百十,再判断每个小字符串尾部有几个0,
有0就不用插单元,
再每个小字符串插万亿十万亿.
如果两个字符串中间有开头末尾都是0,那么单元还要往前移再插!
shit!
后来,我做出来了,一口气写了我认为可能出错的所有示例,!
如果再出错,我给你跪了!

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
非常感谢大家的提问
回复 使用道具 举报
黄玉昆 黑马帝 2013-4-17 08:57:44
8#
如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马