题目:编写一个程序将浮点数转换为人民币读法,例如,将1006.333转换为壹千零陆元叁角叁分!!!
以下是楼主的解答方法,希望朋友们能帮忙优化以下本程序,同时提出一些本程序中的问题,楼主在这里不甚感激!!!
import java.util.Scanner;
public class Num2Rmb {
//定义一个人民币读法数组
private String [] hanArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
//定义一个单位数组
private String [] unitArr={"十","百","千"};
//定义一个人民币单位
private String [] unitRmb={"元","角","分"};
public String Str="";
public void readNum(float num)
{
//提取浮点数整数部分
int numInt = (int)num;
//提取小数部分
int numDec = Math.round((num-numInt)*100);
//将整数部分和小数部分合并成一个字符串
String str = ""+numInt+numDec;
int numLen=str.length();
String numRmb = "";
//扫描字符串每一个字符
for(int i=0;i<numLen;i++)
{
int numCh = str.charAt(i)-48;
//先读取整数部分
if(i>=0&&i<3&&numCh!=0)
{
numRmb += (hanArr[numCh]+unitArr[2-i]);
}
//判断第2位和第3位均为0的情况!!!
else if(i==1&&numCh==0)
{
int j=i+1;
if(numCh==0)
{
numRmb +="";
}
else
{
numRmb += "零";
}
}
//判断后3位均为0的情况!!!
else if(i==2&&numCh==0)
{
int j=i+1;
if(numCh==0)
{
numRmb += "";
}
else
{
numRmb += "零";
}
}
else if(i==3&&numCh==0)
{
numRmb += "";
}
else if(i==3)
{
numRmb += hanArr[numCh];
}
}
numRmb += unitRmb[0];
//再读取小数部分
for(int j=4;j<numLen;j++)
{
int numCh = str.charAt(j)-48;
if(0<numDec&&numDec<10)
{
numRmb += "零";
numRmb += (hanArr[numCh]+unitRmb[j-2]);
}
else if(numDec>=10)
{
if(numCh!=0)
numRmb += (hanArr[numCh]+unitRmb[j-3]);
else
numRmb += "";
}
}
System.out.println(numRmb);
}
public static void main(String[] args) {
System.out.println("请输入需要转换的4位浮点数!");
//读取键盘输入
Scanner scanner = new Scanner(System.in);
//输入一个浮点数
float num = scanner.nextFloat();
//判断输入是否合法
if(num>=1000&&num<10000)
{
Num2Rmb NR = new Num2Rmb();
NR.readNum(num);
}
else
{
System.out.println("对不起!您的输入有误!!!");
}
}
}
以下是楼主的解答方法,希望朋友们能帮忙优化以下本程序,同时提出一些本程序中的问题,楼主在这里不甚感激!!!
import java.util.Scanner;
public class Num2Rmb {
//定义一个人民币读法数组
private String [] hanArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
//定义一个单位数组
private String [] unitArr={"十","百","千"};
//定义一个人民币单位
private String [] unitRmb={"元","角","分"};
public String Str="";
public void readNum(float num)
{
//提取浮点数整数部分
int numInt = (int)num;
//提取小数部分
int numDec = Math.round((num-numInt)*100);
//将整数部分和小数部分合并成一个字符串
String str = ""+numInt+numDec;
int numLen=str.length();
String numRmb = "";
//扫描字符串每一个字符
for(int i=0;i<numLen;i++)
{
int numCh = str.charAt(i)-48;
//先读取整数部分
if(i>=0&&i<3&&numCh!=0)
{
numRmb += (hanArr[numCh]+unitArr[2-i]);
}
//判断第2位和第3位均为0的情况!!!
else if(i==1&&numCh==0)
{
int j=i+1;
if(numCh==0)
{
numRmb +="";
}
else
{
numRmb += "零";
}
}
//判断后3位均为0的情况!!!
else if(i==2&&numCh==0)
{
int j=i+1;
if(numCh==0)
{
numRmb += "";
}
else
{
numRmb += "零";
}
}
else if(i==3&&numCh==0)
{
numRmb += "";
}
else if(i==3)
{
numRmb += hanArr[numCh];
}
}
numRmb += unitRmb[0];
//再读取小数部分
for(int j=4;j<numLen;j++)
{
int numCh = str.charAt(j)-48;
if(0<numDec&&numDec<10)
{
numRmb += "零";
numRmb += (hanArr[numCh]+unitRmb[j-2]);
}
else if(numDec>=10)
{
if(numCh!=0)
numRmb += (hanArr[numCh]+unitRmb[j-3]);
else
numRmb += "";
}
}
System.out.println(numRmb);
}
public static void main(String[] args) {
System.out.println("请输入需要转换的4位浮点数!");
//读取键盘输入
Scanner scanner = new Scanner(System.in);
//输入一个浮点数
float num = scanner.nextFloat();
//判断输入是否合法
if(num>=1000&&num<10000)
{
Num2Rmb NR = new Num2Rmb();
NR.readNum(num);
}
else
{
System.out.println("对不起!您的输入有误!!!");
}
}
}