将数字字符串转换成大写金额字符串

发表于:2007-06-22来源:作者:点击数: 标签:
//将数字字符串转换成大写金额字符串 //@author 何禧 //@created 2004/11/15 19:37 //@param 数字字符串 //@return 大写金额字符串 //@throws Exception //可处理的情况包括如下这些数字形式: [.] [0.] [.0] [.3] [.32] [1.] [23] public String cnCurrency

   

 //将数字字符串转换成大写金额字符串
 //@author 何禧
 //@created 2004/11/15 19:37
 //@param 数字字符串
 //@return 大写金额字符串
 //@throws Exception
 //可处理的情况包括如下这些数字形式: [.] [0.] [.0] [.3] [.32] [1.] [23]
 public String cnCurrency(String sNumber) throws Exception
 {
  String sUnit = "分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟";
  String sChinese = "壹贰叁肆伍陆柒捌玖";
  int nUnit;  //货币单位下标
  int nDotPos;  //传入的数字中,小数点所在的位置
  int nLen;   //长度
  int nValue;  //临时数值
  int i;   //循环变量
  String sInteger; //整数部分
  String sDecimal; //小数部分
  String sSuffix=""; //后缀部分
  
  if (sNumber == null) throw new Exception("没有传入数字!");
  //获取小数点所在位置
  nDotPos = sNumber.indexOf(".");
  if (nDotPos == -1){
   sInteger = (sNumber.equals(""))?"0":sNumber;
   sDecimal = "00";
  }else{
   sNumber = new StringBuffer().append("0").append(sNumber).append("00").toString();
   nDotPos = sNumber.indexOf(".");
   sInteger = sNumber.substring(0,nDotPos);
   sDecimal = sNumber.substring(nDotPos+1).substring(0,2);
  }
   
  StringBuffer sbChinese = new StringBuffer();
  
  //开始处理整数部分
  nLen = sInteger.length();
  for(i=0;i 0) )
   sbChinese.append("元");
  //开始处理小数部分
  if (sDecimal.equals("00")){
   sSuffix = "整";
  }else{
   nValue = Integer.parseInt(sDecimal.substring(0,1));
   if (nValue != 0) sbChinese.append(sChinese.substring(nValue-1,nValue)).append(sUnit.substring(1,2));
   nValue = Integer.parseInt(sDecimal.substring(1,2));
   if (nValue != 0) sbChinese.append(sChinese.substring(nValue-1,nValue)).append(sUnit.substring(0,1));
  }
  //如果小数部分没写任何内容,
  //返回中文结果
  if (sbChinese.length() == 0) sSuffix = "零元";
  sbChinese.append(sSuffix);
  return sbChinese.toString();
 }

原文转自:http://www.ltesting.net