锁定老帖子 主题:Java试题 之 阿拉伯数字转换成中文数字
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-30
曾经写过一个把阿拉伯数字的钱如3,912,999.90元 转换成中文描述
我的解决方案思路和你差不多 |
|
返回顶楼 | |
发表时间:2009-09-06
public static String toChineseNum(long number) { long num1 = 0,num2 = 0; if (number == 0) { return "零"; } else if (number == 1) { return "一"; } else if (number == 2) { return "二"; } else if (number == 3) { return "三"; } else if (number == 4) { return "四"; } else if (number == 5) { return "五"; } else if (number == 6) { return "六"; } else if (number == 7) { return "七"; } else if (number == 8) { return "八"; } else if (number == 9) { return "九"; } else if (number == 10) { return "十"; } else if (number > 99999999) { num1 = number/100000000; num2 = number%100000000; return toChineseNum(num1) + "亿" + ( num2==0?"":( (num2 < 10000000 ? "零":"") + toChineseNum(num2) ) ); } else if (number > 9999 && number < 100000000) { num1 = number/10000; num2 = number%10000; return toChineseNum(num1) + "万" + ( num2 ==0?"":( (num2 < 1000 ? "零":"") + toChineseNum(num2))); } else if (number > 999 && number < 10000) { num1 = number/1000; num2 = number%1000; return toChineseNum(num1) + "千" + ( num2 ==0?"":( (num2 < 100 ? "零":"") + toChineseNum(num2))); } else if (number > 99 && number < 1000 ) { num1 = number/100; num2 = number%100; return toChineseNum(num1) + "百" + ( num2 ==0?"":( (num2 < 10 ? "零":"") + toChineseNum(num2))); } else if (number > 9 && number < 100) { num1 = number/10; num2 = number%10; return toChineseNum(num1) + "十" + ( num2 ==0?"":(toChineseNum(num2))); } return ""; } 这是我的,使用递归,呵呵~ |
|
返回顶楼 | |
发表时间:2009-09-08
建议先学习一下会计里面的数字金额表示方法。
以前也写过类似的程序,比较麻烦的是不知道数该怎么读。 程序倒是方便,主要使用replaceAll,一通替换就够了,不过效率比较低,呵呵。 |
|
返回顶楼 | |
发表时间:2009-10-26
package com.acm; //Java试题 之 阿拉伯数字转换成中文数字 public class TransNumbers { String[] units = new String[] {"", "十", "百", "千", "万", "亿"}; String[] numeric = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; public void transform(String numStr) { int i; int j; //取出前导空格和0 for(i=0,j=numStr.length();i<j;i++){ if(numStr.charAt(i)!='0' && numStr.charAt(i)!=' '){ break; } } StringBuffer buffer = new StringBuffer(); StringBuffer unit=new StringBuffer(); unit.append(""); //将数字反转 String str = new StringBuffer(numStr.substring(i)).reverse().toString(); String temp=null; int length = str.length(); //数字分组转换 for(i=0,j=length>4?4:length;i<length;i+=4,j+=4){ int start=i; int end=j<length?j:length; //每4个为一组 temp=this.trans4(str.substring(start,end)); if(temp.length()>0){ buffer.append(unit); buffer.append(temp); } int unitLength = unit.length(); //单位变换 if(unitLength>0 && unit.lastIndexOf("万")==(unitLength-1)){ unit.setLength(unitLength-1); unit.append("亿"); }else{ unit.append("万"); } } buffer=buffer.reverse(); System.out.println(buffer.toString()); } // 最多转换4位 public String trans4(String str) { StringBuffer buffer = new StringBuffer(); int num; int length = str.length(); for(int i = 0, j = 0; i < length; i++, j++) { num = str.charAt(i) - '0'; if(num > 0) { // 输出单位条件:当前位置数不为0,当前位置不为第一个位置 buffer.append(this.units[j]); buffer.append(this.numeric[num]); } else { // 当前位置不为第一个位置输出一个零 if(i > 0) { buffer.append(this.numeric[num]); } // 当前位置数为0 // 跳过连续的0 do { j++; i++; } while(i<4 && (str.charAt(i) - '0') == 0); i--; j--; } } return buffer.toString(); } public static void main(String[] args) { TransNumbers tn = new TransNumbers(); tn.transform("00001234"); } } 无聊,我也写个看下。 |
|
返回顶楼 | |