/**
* @文件 RmbConversion.java
* @内容 第二次java上机作业
* @功能 人民币小写转换大写类
* @作者 曲振波
* @version 1.00 2009/10/10
*/
package ruangong4.firstteam.bob;
import javax.swing.*;
public class MoneyTranslation {
public static void rmbtostring()
{
double inputnum;
double maxnum=999999999999.99; //支持最大数
int zeroCount; //0个数计数器
int i; //辅助变量
int p;
int quotient; //除4商
int modulus; //余数
String d;
String [] digits={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
String [] radices={"","拾","佰","仟"};
String [] bigRadices={"","万","亿"};
String [] decimals={"角","分"};
do{
String money="";
//String [] parts={"123","45"};
String integral=""; //整数部分
String decimal=""; //小数部分
String output=""; //输出结果
money=JOptionPane.showInputDialog("请输入转换数额(输入quit结束)");
if(money.equals("quit"))
{
break;
}
//**************************************************合法性判断******************************************
if(money.equals(""))
{
JOptionPane.showMessageDialog(null,"输入为空","请输入数字",JOptionPane.INFORMATION_MESSAGE);
continue;
}
try
{
// inputnum=5;
inputnum=Double.parseDouble(money);
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"输入不合法,请重新输入","错误",JOptionPane.INFORMATION_MESSAGE);
continue;
}
if(inputnum>maxnum)
{
JOptionPane.showMessageDialog(null,"你的钱超过1万亿了,我以后跟你混","崇拜",JOptionPane.INFORMATION_MESSAGE);
continue;
}
//**************************************************转换过程******************************************
else
{
//parts=money.split("."); //以小数点为界限分割字符串,有问题,采取temp方法
int temp=money.indexOf("."); //temp 找到小数点的位置
//if(parts.length>1) //分割出来两个字符串
if(temp!=-1&&temp!=0) //temp 如果存在小数点
{
//integral=parts[0]; //获得整数部分及小数部分的子串
//decimal=parts[1]; //
integral=money.substring(0,temp); //temp
decimal=money.substring(temp+1); //temp
if(decimal.length()>2) //小数点后尾数多余的进行四舍五入处理
{
if(Integer.parseInt(decimal.substring(2,3))<5)
{
decimal=decimal.substring(0,2);
}
else if((decimal.substring(0,1).equals("0")==false&&decimal.substring(0,1).equals("9")==false)||(decimal.substring(0,1).equals("0")&&decimal.substring(1,2).equals("9")))//注意这两句
{
decimal=Integer.toString(Integer.parseInt(decimal.substring(0,2))+1);
}
else if(decimal.substring(0,1).equals("0"))
{
decimal="0"+Integer.toString(Integer.parseInt(decimal.substring(0,2))+1);
}
else if(decimal.substring(0,1).equals("9")&&(decimal.substring(1,2).equals("9")))
{
decimal="0";
integral=Long.toString(Long.parseLong(integral)+1);
}
}
}
else if(temp==0)
{
JOptionPane.showMessageDialog(null,"输入不合法,请重新输入","错误",JOptionPane.INFORMATION_MESSAGE);
continue;
}
else //无小数
{
integral=money;
decimal="";
}
if(Long.parseLong(integral)>0) //判断整数部分是否非零
{
zeroCount=0;
for(i=0;i<integral.length();i++) //遍历整数部分
{
p=integral.length()-i-1; //当前位数
d=integral.substring(i,i+1);
quotient=p/4; //比万大的部分处理
modulus=p%4;
if(d.equals("0"))
{
zeroCount++;
}
else
{
if(zeroCount>0) //下一位不再是0了
{
output+=digits[0];
}
zeroCount=0; //清零
output+=digits[Integer.parseInt(d)]+radices[modulus];//输出数字和单位
}
if(modulus==0&&zeroCount<4)
{
output+=bigRadices[quotient];
}
}
output+="元";
}
if(decimal!="") //处理小数部分
{
for(i=0;i<decimal.length();i++)
{
d=decimal.substring(i,i+1);
if(d.equals("0")==false)
output+=digits[Integer.parseInt(d)]+decimals[i];
}
}
if(output.equals(""))
{
output="零元";
}
if(Integer.parseInt(decimal)==0)
{
output+="整";
}
output="人民币"+output;
JOptionPane.showMessageDialog(null,output,"转换结果",JOptionPane.INFORMATION_MESSAGE);
}
} while(true);
return;
}
/**
* @name main
* @param args
*/
public static void main( String args[] )
{
rmbtostring();
System.exit(0);
}
}