浮点型数据(字符串数据)转换为大写汉字读出,或者使用人民币方式读出
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. 数字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; * */
如有哪位高手有自己的想法,提出建议或者意见吧,本在再次先谢过!
相关文章推荐
- 使用PHP把下划线分隔命名的字符串 转换成驼峰式命名方式 , 把下划线后面的第一个字母变成大写
- 【Help】使用C C++或者C#语言编写:人民币小写转换成大写的程序!谢谢。。。
- Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
- 将一串数字转化为中文字符串,使用 C# 将数字转换成大写人民币 (例如:用户输入2300,系统就会显示两千三百元 )
- 使用PHP把下划线分隔命名的字符串 转换成驼峰式命名方式 , 把下划线后面的第一个字母变成大写
- 假设用一个名为text的字符串向量存放文本文件的数据,其中的元素或者是一句话或者是一个用于表示段分隔的空字符串。将text中第一段全改为大写形式
- 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
- java对象和json数据转换实现方式2-使用gson实现
- JS实现人民币小写转换成汉字大写
- 如何使用QString把不同类型的数据如何转换成字符串形式输出
- javascript数据(对象字符串等)转换成json数据的javascript扩展包的使用
- 将字符串数据转换成bean对象或者list集合
- sql server数字小写人民币转换成大写人民币(两种方式)
- 不使用库函数将整型数据转换为字符串
- 人民币金额由阿拉伯数值转换成汉字大写数值的函数
- 关于使用TCP或者其他链接方式时数据接收问题
- C#中利用正则表达式将人民币金额转换为大写汉字
- 基于Web Service的客户端框架搭建一:C#使用Http Post方式传递Json数据字符串调用Web Service
- JS实现人民币小写转换成汉字大写
- java取出以数字开头或者以数字结尾的字符串,将字符串转换为大写