浮点型数据(字符串数据)转换为大写汉字读出,或者使用人民币方式读出

花了一两个小时重新看了一下这个程序,改进了一些地方,还有一些代码可重用的部分,思路添加到后面,以后实现
分析: 1. 数字1每加4位加单位,如元,万,亿  

2. 每四位读出方式相近


public class Num2Rmb2
{
	private String[] numArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌",
			"玖" };
	private String[] array1 = { "拾", "佰", "仟" };
	private String[] array2 = { "元", "万", "亿" };


	private String[] divide(double num)
	{
		long intNum = (long) num;


		long decNum = (int) ((num - intNum) * 100);


		if ((int) decNum >= 0 && (int) decNum <= 10)
		{
			return new String[] { intNum + "", "0" + decNum };
		}
		else
		{
			return new String[] { intNum + "", decNum + "" };
		}
	}


	
	// 处理整数部分:四位或者四位以内的数据
	private String handIntNum4(String intNum)
	{
		int numLen = intNum.length();
		String result = "";


		for (int i = 0; i < numLen; i++)
		{
			int num = intNum.charAt(i) - '0';


			if (num != 0)
			{
				if (i != numLen - 1)
					result += numArr[num] + array1[numLen - 2 - i];
				else
					result += numArr[num];
			}
			else
			{
				// 某位的数字等于0 的时候,判断长度,并且下一位不等于0,则添加 “零”
				if (i < numLen - 1 && (intNum.charAt(i + 1) - '0' != 0))
					result += numArr[0];
			}
		}


		if (result != "")
		{
			result += array2[0];
		}
		return result;
	}


	// 处理八位(包含八位)整数
	private String handIntNum8(String intNum)
	{
		int numLen = intNum.length();
		String result = "";


		for (int i = 0; i < numLen - 4; i++)
		{
			int num = intNum.charAt(i) - '0';
			if (num != 0)
			{
				if (i != numLen - 5)
					result += numArr[num] + array1[numLen - 6 - i];
				else
					result += numArr[num];
			}
			else
			{
				// 某位的数字等于0 的时候,判断长度,并且下一位不等于0,则添加 “零”
				if (i < numLen - 1 && intNum.charAt(i + 1) - '0' != 0)
					result += numArr[0];
			}
		}


		if (result != "")
		{
			result += array2[1];
		}


		result += new Num2Rmb2().handIntNum4(intNum.substring(numLen - 4));


		return result;
	}


	// 处理12位(包含12位)的整数
	private String handIntNum12(String intNum)
	{
		int numLen = intNum.length();
		String result = "";


		for (int i = 0; i < numLen - 8; i++)
		{
			int num = intNum.charAt(i) - '0';
			if (num != 0)
			{
				if (i != numLen - 9)
					result += numArr[num] + array1[numLen - 10 - i];
				else
					result += numArr[num];
			}
			else
			{
				// 某位的数字等于0 的时候,判断长度,并且下一位不等于0,则添加 “零”
				if (i < numLen - 1 && intNum.charAt(i + 1) - '0' != 0)
					result += numArr[0];
			}
		}


		if (result != "")
		{
			result += array2[2];
		}


		result += new Num2Rmb2().handIntNum8(intNum.substring(numLen - 8));


		return result;
	}


	// 根据情况分别判断
	private String handIntNum(String intNum)
	{
		int length = intNum.length();
		String rmb = null;


		if (length <= 4)
		{
			rmb = new Num2Rmb2().handIntNum4(intNum);
		}
		else if (length <= 8)
		{
			rmb = new Num2Rmb2().handIntNum8(intNum);
		}
		else if (length <= 12)
		{
			rmb = new Num2Rmb2().handIntNum12(intNum);
		}
		else
			rmb = "长度已经超过12位,请检查";
		return rmb;
	}


	// 处理小数部分
	private String handDecNum(String decNum)
	{
		String rmb = "";


		if (decNum.charAt(0) - '0' == 0)
		{
			if (decNum.charAt(1) - '0' == 0)
			{
				rmb = "";
			}
			else
				rmb = numArr[decNum.charAt(1) - '0'] + "分";
		}
		else
		{
			if (decNum.charAt(1) - '0' == 0)
				rmb = numArr[decNum.charAt(0) - '0'] + "角";
			else
				rmb = numArr[decNum.charAt(0) - '0'] + "角"
						+ numArr[decNum.charAt(1) - '0'] + "分";
		}


		return rmb;


	}


	public static void main(String[] args)
	{
		//测试数据
		String[] str = new Num2Rmb2().divide((double) 123456789.86);


		for (String array : str)
		{
			System.out.print(array+"\t");
		}
		
		System.out.println();


		System.out.print(new Num2Rmb2().handIntNum(str[0]) + "  ");


		System.out.println(new Num2Rmb2().handDecNum(str[1]));
	}


}

想到的改进思路,
/**
	 * 1. numLen 1-4 
	 * 2. 判断 length -1 		*x 
	 * 3. array1[numLen -2 -i] 	*y 
	 * 4. array2[0] 			*z
	 * 
	 * 1. 5-8 
	 * 2.length -1-4 			*x
	 * 3. array1[numLen-2-4-i] 	*y
	 * 4. array2[1]				*z
	 * 
	 * 1. 9-12 					*x
	 * 2. length -1 -8 			*y
	 * 3. array1[numLen-2-8-i]	*z 
	 * 4. array2[2]
	 */
	
	/**
	 * i= 0,1,2
	 * 
	 * k = length-1
	 * j = length-2
	 * 
	 * x = length-1-4*i;
	 * y = length-2-4*i;
	 * 
	 * z = i;
	 * 
	 */




如有哪位高手有自己的想法,提出建议或者意见吧,本在再次先谢过!

猜你喜欢

转载自blog.csdn.net/antfit/article/details/7482245