日期:2014-05-20 浏览次数:20859 次
public class NumToRMB{ public static void main(String[] args){ System.out.println(changeToBig(Double.parseDouble(args[0]))); } public static String changeToBig(double value){ char[] hunit={'拾','佰','仟'}; //段内位置表示 char[] vunit={'万','亿'}; //段名表示 char[] digit={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; //数字表示 long midVal = (long)(value*100); //转化成整形 String valStr=String.valueOf(midVal); //转化成字符串 String head=valStr.substring(0,valStr.length()-2); //取整数部分 String rail=valStr.substring(valStr.length()-2); //取小数部分 String prefix=""; //整数部分转化的结果 String suffix=""; //小数部分转化的结果 //处理小数点后面的数 if(rail.equals("00")){ //如果小数部分为0 suffix="整"; } else{ suffix=digit[rail.charAt(0)-'0']+"角"+digit[rail.charAt(1)-'0']+"分"; //否则把角分转化出来 } //处理小数点前面的数 char[] chDig=head.toCharArray(); //把整数部分转化成字符数组 boolean preZero=false; //标志当前位的上一位是否为有效0位(如万位的0对千位无效) byte zeroSerNum = 0; //连续出现0的次数 for(int i=0;i<chDig.length;i++){ //循环处理每个数字 int idx=(chDig.length-i-1)%4; //取段内位置 int vidx=(chDig.length-i-1)/4; //取段位置 if(chDig[i]=='0'){ //如果当前字符是0 preZero=true; zeroSerNum++; //连续0次数递增 if(idx==0 && vidx >0 &&zeroSerNum < 4){ prefix += vunit[vidx-1]; preZero=false; //不管上一位是否为0,置为无效0位 } }else{ zeroSerNum = 0; //连续0次数清零 if(preZero){ //上一位为有效0位 prefix+=digit[0]; //只有在这地方用到'零' preZero=false; } prefix+=digit[chDig[i]-'0']; //转化该数字表示 if(idx > 0) prefix += hunit[idx-1]; if(idx==0 && vidx>0){ prefix+=vunit[vidx-1]; //段结束位置应该加上段名如万,亿 } } } if(prefix.length() > 0) prefix += '圆'; //如果整数部分存在,则有圆的字样 return prefix+suffix; //返回正确表示 } }
------解决方案--------------------
public static void changToBig(double num) { String[] big = {"零","壹","贰","叁","肆","伍","陆","柒","扒","玖"}; String[] bit = {"元","拾","百","千","万","十万","百万","千万","亿"}; String n = Double.toString(num); String last = n.substring(n.lastIndexOf(".")+1); String first = n.substring(0,n.lastIndexOf(".")); String print = ""; for(int i=0;i<first.length();i++) { print = print + big[Integer.parseInt(first.substring(i,i+1))]; print = print + bit[first.length()-i-1]; } for(int i=0;i<2;i++) { print = print + big[Integer.parseInt(last.substring(i,i+1))]; if(i==0) print = print + "角"; else print = print + "分"; } System.out.println(print); }