本帖最后由 zhanghua 于 2011-11-15 14:08 编辑
这个程序将数字转换成人民币大写的形式
如:1000001
壹佰万零壹元整
public class AmountInWords {
private String result="";
private String[] wordsArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String[] unitArr={"拾","佰","仟","万","亿"};
/**
* 把一个浮点数分解成整数和小数部分字符串
*/
// private String getDecimalWords(String decimal){
//
// }
/**
* 将特殊位前的零去掉
*/
void throwZero(){
result=result.substring(0, result.length()-1);
}
/**
* 增加单位
*/
void addUnit(int po){
if(po==8){
result+=unitArr[4];
}else if(po==4){
result+=unitArr[3];
}
else if(po==3||po==7){
result+=unitArr[2];
}else if(po==2||po==6){
result+=unitArr[1];
}else if(po==1||po==5){
result+=unitArr[0];
}else if(po==0){
result+="元";
}
}
/**
* 判断在特殊位上前面是否为零
*/
private boolean frontIsZero(int po) {
int len = result.length() - 1;
if (result.charAt(len) == '零') {
return true;
}
return false;
}
private String[] divide(String numStr){
if(numStr.contains(".")){
String[] arr=numStr.split("\\.");
return arr;
}
return new String[]{numStr,""};
}
//负责整的转换,
private String toWords(String numStr){
String[] arr=divide(numStr);
//去掉多余的零
String temp=Integer.parseInt(arr[0])+"";
integerWords(temp);
String decimal=decimalWords(arr[1]);
if(decimal.length()!=0){
result=result+decimal;
}else{
result=result+"整";
}
return result;
}
/**
* 把一个整数数字转换为大写数字
*/
String integerWords(String numStr){
//用作标识出现零的次数是否连续
boolean flag=true;
for(int i=0;i<numStr.length();i++){
int digit=numStr.charAt(i)-48;
int po=numStr.length()-1-i;
//如果不是最后一位数字,而且数字不是零,则需要添加单位
if(i!=numStr.length()-1&&digit!=0){
flag=true;
result+=wordsArr[digit];
addUnit(po);
}else if(po==8){
//判断是否在特殊位置上 应该判断特殊位前边是否为零,如果为零应先载取,再进行增加单位
addUnit(po);
}
else if(po==4){
if(frontIsZero(po)){
throwZero();
}
//去掉零之后,应该将标识设置为true代表已经没有零
flag=true;
addUnit(po);
}
else if(po==0){
//因为前边没有将最后一位添加上去,所以下边将进行添加,而且,已经到了最后一位,如果最后一位前边是零应该截取掉,并且最后一位也不为零
if(digit!=0){
result+=wordsArr[digit];
}
if(frontIsZero(po)){
throwZero();
}
addUnit(po);
}
else {
if(flag){
flag=false;
result+=wordsArr[digit];
}
}
}
return result;
}
String decimalWords(String decimalStr){
String decimalWrods="";
String[] decimalUnit={"角","分"};
for(int i=0;i<decimalStr.length();i++){
int digit=decimalStr.charAt(i)-48;
if(digit==0&&i==0){
decimalWrods="零";
}else{
decimalWrods=decimalWrods+wordsArr[digit]+decimalUnit;
}
}
return decimalWrods;
}
public static void main(String[] args) {
AmountInWords amount=new AmountInWords();
amount.toWords("1000001");
System.out.println(amount.result);
}
} |