大二是老师让做一个综合试验::用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天的个程序发布下吧!!
           还有个问题处理小数点..按说找到小数点位置在分割开处理就可以啦,.没弄.弄了在发布吧!!现在不想编程,,,想随便转转,看看云风去!!!!(决定以后只要看本专业相关的书,不管受益多少,都要总结下)今下午的当然不例外哈!!!