JAVA 数字转换为中文大写的转换

【转】

读入一个浮点数值,将其转化为中文金额的大写形式。
如123.45,转化为:壹佰贰拾叁元肆角伍分。 以下是各种情况要完善:
1. 当金额为整数,只表示整数部分,省略小数部分,并添加“整”字。如123表示为:壹佰贰拾叁元整。
2.当金额中含有连续的0时,只需写一个“零”即可。如10005表示为:壹万零伍元整。
3.10的表示形式。如110表示为:壹佰贰拾元整。而10则表示为:拾元整。

 
 
package com.heyang;

/**
 * 将10亿以内的阿拉伯数字转成汉字大写形式
 * @author xizhenyin
 * 
 */
public class CnUpperCaser {
  // 整数部分
  private String integerPart;
  // 小数部分
  private String floatPart;
  
  // 将数字转化为汉字的数组,因为各个实例都要使用所以设为静态
  private static final char[] cnNumbers={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
  
  // 供分级转化的数组,因为各个实例都要使用所以设为静态
  private static final char[] series={'元','拾','百','仟','万','拾','百','仟','亿'};
  
  /**
   * 构造函数,通过它将阿拉伯数字形式的字符串传入
   * @param original
   */
  public CnUpperCaser(String original){ 
    // 成员变量初始化
    integerPart="";
    floatPart="";
    
    if(original.contains(".")){
      // 如果包含小数点
      int dotIndex=original.indexOf(".");
      integerPart=original.substring(0,dotIndex);
      floatPart=original.substring(dotIndex+1);
    }
    else{
      // 不包含小数点
      integerPart=original;
    }
  }
  
  /**
   * 取得大写形式的字符串
   * @return
   */
  public String getCnString(){
    // 因为是累加所以用StringBuffer
    StringBuffer sb=new StringBuffer();
    
    // 整数部分处理
    for(int i=0;i<integerPart.length();i++){
      int number=getNumber(integerPart.charAt(i));
      
      sb.append(cnNumbers[number]);
      sb.append(series[integerPart.length()-1-i]);
    }
    
    // 小数部分处理
    if(floatPart.length()>0){
      sb.append("点");
      for(int i=0;i<floatPart.length();i++){
        int number=getNumber(floatPart.charAt(i));
        
        sb.append(cnNumbers[number]);
      }
    }
    
    // 返回拼接好的字符串
    return sb.toString();
  }
  
  /**
   * 将字符形式的数字转化为整形数字
   * 因为所有实例都要用到所以用静态修饰
   * @param c
   * @return
   */
  private static int getNumber(char c){
    String str=String.valueOf(c);   
    return Integer.parseInt(str);
  }
  
  /**
   * @param args
   */
  public static void main(String[] args) {
    System.out.println(new CnUpperCaser("123456789.12345").getCnString());
    System.out.println(new CnUpperCaser("123456789").getCnString());
    System.out.println(new CnUpperCaser(".123456789").getCnString());
    System.out.println(new CnUpperCaser("0.1234").getCnString());
    System.out.println(new CnUpperCaser("1").getCnString());
    System.out.println(new CnUpperCaser("12").getCnString());
    System.out.println(new CnUpperCaser("123").getCnString());
    System.out.println(new CnUpperCaser("1234").getCnString());
    System.out.println(new CnUpperCaser("12345").getCnString());
    System.out.println(new CnUpperCaser("123456").getCnString());
    System.out.println(new CnUpperCaser("1234567").getCnString());
    System.out.println(new CnUpperCaser("12345678").getCnString());
    System.out.println(new CnUpperCaser("123456789").getCnString());
  }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值