您的位置:首页 > 编程语言 > Java开发

输入一个整数部分不超过12位的小数,变成人民币读法

2016-10-20 14:04 316 查看
package test;

import java.util.*;

public class num2rmb {

private String[] hanArr= {"零" , "壹" , "贰" , "叁" , "肆" ,
"伍" , "陆" , "柒" , "捌" , "玖"};
private String[] unitArr = {"十", "百", "千"};

private String[] divide(double num)
{
//将一个浮点数强制类型转换为long,即得到它的整数部分。
long zheng = (long)num;
//浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数。
//Math类的round方法,返回与参数最接近(经四舍五入后)的整数。
long xiao = Math.round((num - zheng) * 100);
//下面用了2种方法把整数转换为字符串。
//return一个匿名数组。
//String类的valueOf(int i)方法,返回整数参数的字符串表达式。
return new String[]{zheng + "",String.valueOf(xiao)};
}

private String toHanStr(String numStr)
{
int strLen = numStr.length();
int yu = strLen % 4;
//partNum表示该数字字符串可划分成的节数(每4位为一节)。
//如余数等于0,则将strLen/4赋值给partNum;否则将strLen/4 + 1赋值给partNum。
int partNum = yu == 0 ? strLen/4 : strLen/4 + 1;
//firstPartLen表示第一节的长度
int firstPartLen = strLen - (partNum - 1)*4;   //因为后面节的长度是总节数减-1,而后面肯定是满4个的
String resultFirst = "";
String resultSecond = "";
String resultThird = "";

for (int i = 0 ; i < partNum ; i ++ )
{
if (i == 0)
{
String firstPart = numStr.substring(0, firstPartLen);
for(int j=0;j<firstPartLen;j++)
{
int num=firstPart.charAt(j)-48;

if(j!=firstPartLen-1&&num!=0)
{
resultFirst += hanArr[num] + unitArr[firstPartLen - 2 - j];
}
else if (j==firstPartLen-1&&num!=0)
{
resultFirst += hanArr[num];
}
else if(num==0)
{
if(((j-1)>=0)&&firstPart.charAt(j-1)-48==0) continue;
if(((j-1)>=0)&&firstPart.charAt(j-1)-48!=0&&((j+1)<=firstPartLen-1)&&firstPart.charAt(j+1)-48!=0)
resultFirst += hanArr[num];
}
}
}
else if(i==1)
{
String secondPart = numStr.substring(firstPartLen, (firstPartLen + 4));
int secPartLen = 4;

for(int j=0;j<secPartLen;j++)
{
int num=secondPart.charAt(j)-48;
if (Integer.parseInt(secondPart) == 0 && partNum == 3)
{
resultSecond = hanArr[0];
break;
}
else if(j!=secPartLen-1&&num!=0)
{
resultSecond += hanArr[num] + unitArr[secPartLen - 2 - j];
}
else if (j==secPartLen-1&&num!=0)
{
resultSecond += hanArr[num];
}
else if(num==0)
{
if(((j-1)>=0)&&secondPart.charAt(j-1)-48==0) continue;
if(((j-1)>=0)&&secondPart.charAt(j-1)-48!=0&&((j+1)<=secPartLen-1)&&secondPart.charAt(j+1)-48!=0)
resultSecond += hanArr[num];
}
}
}
else if(i==2)
{
String thirdPart = numStr.substring((firstPartLen + 4), strLen);
int thirdPartLen = 4;

for(int j=0;j<thirdPartLen;j++)
{
int num=thirdPart.charAt(j)-48;

if(j!=thirdPartLen-1&&num!=0)
{
resultThird += hanArr[num] + unitArr[thirdPartLen - 2 - j];
}
else if (j==thirdPartLen-1&&num!=0)
{
resultThird += hanArr[num];
}
else if(num==0)
{
if(((j-1)>=0)&&thirdPart.charAt(j-1)-48==0) continue;
if(((j-1)>=0)&&thirdPart.charAt(j-1)-48!=0&&((j+1)<=thirdPartLen-1)&&thirdPart.charAt(j+1)-48!=0)
resultThird += hanArr[num];
}
}
}

}

String result = "";

if (partNum == 1)
{
//如果数字仅为0
if (resultFirst == "")
{
result = hanArr[0] + "元";
}
else
{
result = resultFirst + "元";
}
}
else if (partNum == 2)
{
//如果第二节全为0
if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0)
{
result = resultFirst + "万";
}
else
{
result = resultFirst + "万" + " " + resultSecond+ "元";
}
}
else if (partNum == 3)
{

if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0
&& Integer.parseInt(numStr.substring((firstPartLen + 4), strLen)) == 0)
{
result = resultFirst + "亿";
}
else if(Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0)
{
result = resultFirst + "亿"  +  " " + resultSecond + " " +  resultThird+ "元";
}
else if(Integer.parseInt(numStr.substring((firstPartLen + 4), strLen)) == 0)
{
result = resultFirst + "亿" + " " + resultSecond + "万" + " " +  "元";
}
else
{
result = resultFirst + "亿" + " " + resultSecond + "万" + " " + resultThird+ "元";
}
}
return result;

}

private String toXiaoStr(String numStr)
{
String result = "";
int num1 = numStr.charAt(0) - 48;
result += hanArr[num1] + "角";
int num2 = numStr.charAt(1) - 48;
result += hanArr[num2] + "分";
return result;
}
public static void main(String[] args)
{
//等号左边的Num2Rmb是nr的变量类型,右边的Num2Rmb是构造器名
num2rmb nr = new num2rmb();

Scanner scan = new Scanner(System.in);
System.out.println("请输入一个整数部分最多为12位的小数");
double sc=scan.nextDouble();
while(String.valueOf(Math.floor(sc)).length()>12)
{
System.out.print("输入错误,请重新输入:");
sc=scan.nextDouble();
}

String[] all=nr.divide(sc);
String zhengpart=all[0];
String xiaopart=all[1];

//测试把一个12位以内的数字字符串变成汉字字符串
System.out.println(nr.toHanStr(zhengpart)+" "+nr.toXiaoStr(xiaopart));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  人民币读法 Java
相关文章推荐