论坛首页 综合技术论坛

Java试题 之 阿拉伯数字转换成中文数字

浏览 11452 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (3)
作者 正文
   发表时间:2009-07-30  
曾经写过一个把阿拉伯数字的钱如3,912,999.90元 转换成中文描述

我的解决方案思路和你差不多
0 请登录后投票
   发表时间: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 "";					
	}

 这是我的,使用递归,呵呵~

0 请登录后投票
   发表时间:2009-09-08  
建议先学习一下会计里面的数字金额表示方法。
以前也写过类似的程序,比较麻烦的是不知道数该怎么读。
程序倒是方便,主要使用replaceAll,一通替换就够了,不过效率比较低,呵呵。
0 请登录后投票
   发表时间: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");

	}
}



无聊,我也写个看下。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics