数字转中文

package zxc.utils;

import java.util.HashMap;
import java.util.Map;

public class RmbConversion {

	static StringBuffer	buf;
	
	public static void main(String[] args) {
		System.out.println(insensitive(1000));
	}

	/** *主方法(负责完成小写转大写)* */
	public static StringBuffer insensitive(double totalMoney) {
		int count = 0;
		buf = new StringBuffer();
		String[] digit = { "分", "角", "元", "拾", "佰", "仟", "万" };
		int shang, mo = 0;
		int totalMoneys = (int) (totalMoney * 100);

		//int totalMoneys = 5523;
		/** *这个循环的大小其实可以根据digit数组的长度来控制** */
		Integer integer = 10000000;
		for (int exponent = digit.length - 1; exponent >= 0; exponent--) {
			integer /= 10;
			shang = totalMoneys / integer;
			mo = totalMoneys % integer;
			if(count == 0){
				count = getMarker(shang); //设置的标记数,用来判断'0'出现的情况(有效部分的'0',无效部分的'0')
			}		
			setValue(shang, digit[exponent],count, mo);
			totalMoneys = mo;
		}
		return buf;
	}

	/***对传递过来的整数进行赋值***/
	public static void setValue(int zheShu, String digit, int count, int mo) {
		if (zheShu > 0) {
			buf.append(getConstant(zheShu) + digit);
		} else if(zheShu == 0){
			if(count > 0 && mo >0)
			{	//有效'0'
				buf.append(getConstant(zheShu) + digit);
			}else{
				//无效'0'
				buf.append("×" + digit);
			}	
		}
	}
	
	/*对传递进来的数进行判断,如果大于0则加一*/
	public static int getMarker(int number){
		if(number > 0){
			return 1;
		} 
		return 0;
	}

	public static String getConstant(int constant) {
		Map<Integer, String> num = new HashMap<Integer, String>();
		String[] number = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
		for (int i = 0; i < 10; i++) {
			num.put(i, number[i]);
		}
		return num.get(constant).toString();
	}
}

 

posted @ 2011-08-05 16:28  上善¤若水  阅读(142)  评论(0编辑  收藏  举报