您的位置:首页 > 其它

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

2012-04-20 17:19 591 查看
花了一两个小时重新看了一下这个程序,改进了一些地方,还有一些代码可重用的部分,思路添加到后面,以后实现

分析: 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;
*
*/


如有哪位高手有自己的想法,提出建议或者意见吧,本在再次先谢过!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string class 测试
相关文章推荐