import java.util.Arrays;
/**
* 将浮点数转换为人民币读法字符串
* @author pc
*
*/
public class Num2Rmb {
private String[] hanArr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String[] unitArr = {"十","百","千"};
private String[] unitXiaoArr = {"角","分"};
/**
* 把一个浮点数分解成整数部分和小数部分字符串
* @param num 需要被分解的浮点数
* @return 分解出来的整数部分和小数部分。第一个数组元素是整数部分,第二个数据元素是小数部分
*/
private String[] divide(double num){
//将一个浮点数强制类型转为long型,即得到它的整数部分
long zheng = (long) num;
//浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数
long xiao = Math.round((num-zheng)*100);
//下面用了两种方法将整数转换为字符串
return new String[]{zheng+"",String.valueOf(xiao)};
}
/**
* 把一个四位的数字字符串变成汉字字符串
* @param numStr 需要被转换的四位的数字字符串
* @return 四位的数字字符串被转换为汉字字符串
*/
public String toHanStr(String numStr){
String result = "";
int numLen = numStr.length();
//依次遍历数字字符串的每一位数字
for (int i = 0; i < numStr.length(); i++) {
//把char型数字转换成int型数字,因为他们的ASCII码值恰好相差48
//因此把char型数字减去48得到int型数字,例如‘4’转换为4
int num = numStr.charAt(i) - 48;
//如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)
if ( i != numLen - 1 && num != 0 ){
result += hanArr[num] + unitArr[numLen - 2 - i];
}
//否则不要添加单位
else{
result += hanArr[num];
}
}
return result;
}
/**
* 把一个两位的数字字符串转换为对应的汉字字符串(角和分)
* @param numXiaoStr 需要被转换的两位的数字字符串
* @return 两位的数字字符串被转换为汉字字符串
*/
public String toHanXiaoStr(String numXiaoStr){
String xiaoHanStr = "";
int numLen = numXiaoStr.length();
//依次遍历数字字符串的每一位数字
for (int i = 0; i < numXiaoStr.length(); i++) {
//把char型数字转换成int型数字,因为他们的ASCII码值恰好相差48
//因此把char型数字减去48得到int型数字,例如‘4’转换为4
int num = numXiaoStr.charAt(i) - 48;
//如果不是最后一位数字
if ( i != numLen - 1){
//而且数字不是零,则需要添加单位(角)
if(num != 0){
xiaoHanStr += hanArr[num] + unitXiaoArr[numLen - 2 - i];
}
//如果不是最后一位数字,并且是零,并且最后一位数字不为零,则不要添加单位
else if(num == 0 && numXiaoStr.charAt(i+1) - 48 != 0){
xiaoHanStr += hanArr[num];
}
//如果不是最后一位数字,并且是零,并且最后一位数字也是零,则不添加单位,拼接 "整"
else if(num == 0 && numXiaoStr.charAt(i+1) - 48 == 0){
xiaoHanStr += "整";
break;
}
}
//如果是最后一位数字
else if(i == numLen - 1){
//如果是最后一位数字,并且最后一位不是零,则需要添加单位(分)
if(num != 0 ){
xiaoHanStr += hanArr[num] + unitXiaoArr[numLen - i];
}
}
//否则不要添加单位
else{
xiaoHanStr += hanArr[num];
}
}
return xiaoHanStr;
}
/**
* 把一个N位的数字字符串拼接汉字单位字符串
* @param numStr 需要被转换的N位的数字字符串
* @return N位的数字字符串拼接汉字单位字符串
*/
// public String toUnitStr(String numStr){
// String result = "";
// int numLen = numStr.length();
// //依次遍历数字字符串的每一位数字
// for (int i = 0; i < numStr.length(); i++) {
// //把char型数字转换成int型数字,因为他们的ASCII码值恰好相差48
// //因此把char型数字减去48得到int型数字,例如‘4’转换为4
// int num = numStr.charAt(i) - 48;
// //如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)
// if ( i != numLen - 1 && num != 0 ){
// result += hanArr[num] + unitArr[numLen - 2 - i];
// }
// //否则不要添加单位
// else{
// result += hanArr[num];
// }
// }
// return result;
// }
//主方法
public static void main(String[] args){
// String number = "1234567";
// String number = "123456789";
String finalHanStr="";//最终输出的汉字字符串
String finalZhengHanStr="";//最终输出的整数部分汉字字符串
String finalXiaoHanStr="";//最终输出的小数部分汉字字符串
// float numFloatStr = (float) 1234567890123.12621;
float numFloatStr = (float) 1234523.12621;
// String number = "1234567890123";
// System.out.println("number="+number);
Num2Rmb nr = new Num2Rmb();
//测试把一个浮点数分解成整数部分和小数部分
System.out.println(Arrays.toString(nr.divide(numFloatStr)));
String[] numArr = nr.divide(numFloatStr);
if(numArr!=null && numArr.length>=1){
//整数部分
String number = numArr[0];
//小数部分
String numXiao = numArr[1];
System.out.println("number="+number);
System.out.println("numXiao="+numXiao);
// System.out.println("小数01:" + nr.toHanXiaoStr("01"));
// System.out.println("小数77:" + nr.toHanXiaoStr("77"));
// System.out.println("小数45:" + nr.toHanXiaoStr("45"));
// System.out.println("小数90:" + nr.toHanXiaoStr("90"));
// System.out.println("小数00:" + nr.toHanXiaoStr("00"));
//测试把一个N位的数字字符串拼接汉字单位字符串
if(number!=null && !"".equals(number)){
int numberLen = number.length();
int untilForFour = numberLen/4;//判断几个4位的数字
// System.out.println("numberLen="+numberLen);
// System.out.println("untilForFour="+untilForFour);
switch(numberLen){
case 0:
case 1:
case 2:
case 3:
// System.out.println("number="+nr.toHanStr(number)+"元");
finalZhengHanStr = nr.toHanStr(number)+"元";
break;
case 4:
// String lastNum = number.substring(number.length()-3, number.length()-1);
// System.out.println("lastNum="+nr.toHanStr(number)+"元");
finalZhengHanStr = nr.toHanStr(number)+"元";
break;
case 5:
case 6:
case 7:
case 8:
String lastNum2 = number.substring(number.length()-4, number.length());
// System.out.println("lastNum2="+nr.toHanStr(lastNum2));
String lastFourNum = number.substring(0, number.length()-4);
// System.out.println("lastFourNum="+nr.toHanStr(lastFourNum)+"万");
// System.out.println("最终="+nr.toHanStr(lastFourNum)+"万"+nr.toHanStr(lastNum2)+"元");
finalZhengHanStr = nr.toHanStr(lastFourNum)+"万"+nr.toHanStr(lastNum2)+"元";
break;
case 9:
case 10:
case 11:
case 12:
String lastNum3 = number.substring(number.length()-4, number.length());
// System.out.println("lastNum2="+nr.toHanStr(lastNum3));
String lastFourNum2 = number.substring(number.length()-8, number.length()-4);
// System.out.println("lastFourNum="+nr.toHanStr(lastFourNum2)+"万");
String lastFourFourNum3 = number.substring(0, number.length()-8);
// System.out.println("lastNum="+nr.toHanStr(lastFourFourNum3)+"亿");
// System.out.println("最终="+nr.toHanStr(lastFourFourNum3)+"亿"+nr.toHanStr(lastFourNum2)+"万"+nr.toHanStr(lastNum3)+"元");
finalZhengHanStr = nr.toHanStr(lastFourFourNum3)+"亿"+nr.toHanStr(lastFourNum2)+"万"+nr.toHanStr(lastNum3)+"元";
break;
case 13:
case 14:
case 15:
case 16:
String lastNum4 = number.substring(number.length()-4, number.length());
// System.out.println("lastNum2="+nr.toHanStr(lastNum4));
String lastFourNum4 = number.substring(number.length()-8, number.length()-4);
// System.out.println("lastNum="+nr.toHanStr(lastFourNum4)+"万");
String lastFourFourNum4 = number.substring(number.length()-12, number.length()-8);
// System.out.println("lastNum="+nr.toHanStr(lastFourFourNum4)+"亿");
String lastFourFourFourNum4 = number.substring(0, number.length()-12);
// System.out.println("lastNum="+nr.toHanStr(lastFourFourFourNum4)+"万亿");
// System.out.println("最终="+nr.toHanStr(lastFourFourFourNum4)+"万亿"+nr.toHanStr(lastFourFourNum4)+"亿"+nr.toHanStr(lastFourNum4)+"万"+nr.toHanStr(lastNum4)+"元");
finalZhengHanStr = nr.toHanStr(lastFourFourFourNum4)+"万亿"+nr.toHanStr(lastFourFourNum4)+"亿"+nr.toHanStr(lastFourNum4)+"万"+nr.toHanStr(lastNum4)+"元";
break;
default:
System.out.println("您输入的数字太长了,已经超过17位千万亿了,请重新输入");
}
}
//将小数部分转换为对应的角和分
finalXiaoHanStr = nr.toHanXiaoStr(numXiao);
}
//测试把一个四位的数字字符串变成汉字字符串
// System.out.println(nr.toHanStr("3284"));
// System.out.println(nr.toUnitStr("3284"));
finalHanStr = finalZhengHanStr+finalXiaoHanStr;
System.out.println("最终输出的中文字符串:"+finalHanStr);
}
}
将浮点数转换为人民币读法字符串
最新推荐文章于 2022-03-19 15:06:17 发布