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

把数字转换为人民币大写(用于银行系统)

2008-12-13 20:55 471 查看
大二是老师让做一个综合试验::用C++实现简易银行系统,其中用到在打印流水账时要求把金额转换为人民币大写...当时傻里吧唧的,,,随便拷贝了个同学的应付老师交了了事...前一段一个大二的弟兄向我提起银行程序..问起金额转换,起初心想要处理零零等问题麻烦,结果一个同学说四位,四位处理,OK..豁然开朗,顺利完工

/**
*@author sunpander
*time: 08-12-11 19:16
* 把输入的数字转换成人民币大写的形式
*/

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ChangeNumToRMB {

String moneyStrs[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
public static void main(String[] args) {
// TODO Auto-generated method stub
boolean isDebug = true;
while(isDebug)
{
int num =0;
String changedStr ="";
System.out.println("请输入需要转换的金额:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean isWrongInput = true;
while(isWrongInput)
{
try {
String str = br.readLine();

num = Integer.parseInt(str);

} catch (Exception e) {
System.out.println("输入数字有误,必须是:0"+"到"+Integer.MAX_VALUE+" 的整数");

// TODO Auto-generated catch block
//e.printStackTrace();
isWrongInput = true;
continue;
}
isWrongInput = false;
}
ChangeNumToRMB chan = new ChangeNumToRMB();
changedStr=chan.getChangedString(num);
}
}

public String getChangedString(int num)
{

//Money用于存放输入的金额数
int moneyNum=num;
String moneyStr="";
System.out.println("输入的钱数是:");
if(moneyNum<0)
{
System.out.println("数字必须大于零");
}
else if(moneyNum==0)
{
moneyStr = "零元";
}
//只有四位数,即最大9999.小于10000
else if(moneyNum<10000)
{
moneyStr = this.getFourNumStr(moneyNum)+"元";
}
//大于一万,小于一千万
else if(moneyNum<=10000000)// && moneyNum>10000)
{

int firstFourNum,lastFourNum;
firstFourNum =moneyNum/10000;
lastFourNum =moneyNum%10000;
String firstFourStr = this.getFourNumStr(firstFourNum);
String lastFourStr = this.getFourNumStr(lastFourNum);
if(!lastFourStr.contains("仟"))
lastFourStr="零"+lastFourStr;
moneyStr=firstFourStr+"万"+lastFourStr+"元";
}
//大于一千万.即上亿但小于最大整数
else if(moneyNum<Integer.MAX_VALUE)//&& moneyNum>10000000)
{
int firstFourNum,secondFourNum,lastFourNum;
firstFourNum =moneyNum/100000000;
secondFourNum =(moneyNum/10000)%1000;
lastFourNum =moneyNum%10000;
String firstFourStr = this.getFourNumStr(firstFourNum);
String secondFourStr = this.getFourNumStr(secondFourNum);
String lastFourStr = this.getFourNumStr(lastFourNum);
if(!lastFourStr.contains("仟"))
lastFourStr="零"+lastFourStr;
if(!secondFourStr.contains("仟"))
secondFourStr="零"+secondFourStr ;
moneyStr=firstFourStr+"亿"+secondFourStr+"万"+lastFourStr+"元";
}
else
System.out.println("someting is wrong");
System.out.println(moneyStr);
return moneyStr;
}

public String getFourNumStr(int fourNum)
{
int qian,bai,shi,ge;
ge =fourNum%10;
shi =(fourNum%100 )/10;
bai = (fourNum%1000)/100;
qian = fourNum/1000;
String strTemp="";
if(qian!=0)
{

strTemp=strTemp.concat(moneyStrs[qian]+"仟");
strTemp=strTemp.concat(moneyStrs[bai]+"佰");
strTemp=strTemp.concat(moneyStrs[shi]+"什");
strTemp=strTemp.concat(moneyStrs[ge]);

strTemp=strTemp.replace("零佰", "零");
strTemp=strTemp.replace("零什", "零");
strTemp=strTemp.replace("零零", "零");
strTemp=strTemp.replace("零零", "零");

if(strTemp.endsWith("零"))
strTemp = strTemp.substring(0, strTemp.length()-1);
}
else if(bai!=0)
{
strTemp=strTemp.concat(moneyStrs[bai]+"佰");
strTemp=strTemp.concat(moneyStrs[shi]+"什");
strTemp=strTemp.concat(moneyStrs[ge]);

strTemp=strTemp.replace("零什", "零");
strTemp=strTemp.replace("零零", "零");

if(strTemp.endsWith("零"))
strTemp = strTemp.substring(0, strTemp.length()-1);
}
else if(shi!=0)
{

strTemp=strTemp.concat(moneyStrs[shi]+"什");
strTemp=strTemp.concat(moneyStrs[ge] );

if(strTemp.endsWith("零"))
strTemp = strTemp.substring(0, strTemp.length()-1);
}
else
strTemp.concat(moneyStrs[ge]);
return strTemp;
}
}

今天上午快十点起来,抄了几份试验报告,下午自习看了云风的<游戏之旅--我的编程感悟>..晚上团契祷告会,我刚回来,,今天就把前2天的个程序发布下吧!!
还有个问题处理小数点..按说找到小数点位置在分割开处理就可以啦,.没弄.弄了在发布吧!!现在不想编程,,,想随便转转,看看云风去!!!!(决定以后只要看本专业相关的书,不管受益多少,都要总结下)今下午的当然不例外哈!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息