编写一个小程序,将数字转换成中文大写。如,10.5转换结果为:拾点伍

解决方案 »

  1.   

    写的不是很清楚,尽量看吧,希望能帮到你,ipublic class NumToCn {
     
      /*
       * 关于说明: 
       * 一、(123.45)读作(一佰贰拾叁)点(肆伍),整数部位与小数部位的读法是不同的,因此将两部份分开读;
       * 二、小数部分是纯数字读取,不做深入说明; 
       * 三、整数部分读取方法   1  2  3  4  5  6  7  8  9
       *         对应单位      亿 仟 佰 拾 萬 仟  佰 拾 元
       *         由上下上下一组组读作:一亿贰仟叁佰肆拾伍萬陆仟柒佰捌拾玫元; 
       * 四、出现零时的情况: 
       *      (103)读作一佰零叁,零的单位十没有读;
       *      (10003)读作一万零叁,多个零只读一次; 
       *      (100003)读作一拾萬零叁,万位为零时单位也要读,且万之前的零都不读;
       *      (100000003)读作一亿零叁,此时万位为零,单位不读; 
       * 五、最多只读10亿以内的数;
       */
     
      // 定义其整数部分;
      private String integerPart;
      // 定义其小数部分;
      private String pointPart;
     
      // 中文大写数字定义 ;
      private static final char num[] = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒',
      '捌', '玖' };
      // 单位定义;至于为什么这样定义,请参照说明二;
      private static final char unit[] = { '元', '拾', '佰', '仟', '萬', '拾', '佰',
      '仟', '亿' };
     
      // 假设要转换的数通过字符串形式传入构造方法中,或者其他,不多说了。
      public NumToCn(String numString) {
      integerPart = "";
      pointPart = "";
     
      //判断这数是不是真的合格的数字;
      if(numString.startsWith("0")) {
      System.out.println("大哥,你这是什么数字啊。");
      System.exit(-1);
      }
     
      // 判断是否是小数;
      if (numString.contains(".")) {
      // 定位点的位置;
      int pointLoc = numString.indexOf(".");
      // 得到整数部分;substring方法自查API;
      integerPart = numString.substring(0, pointLoc);
      // 得到小数部分;
      pointPart = numString.substring(pointLoc + 1);
      } else {
      integerPart = numString;
      }
     
      if(integerPart.length() > 9) {
      System.out.println("你丫的,搞这么大的数干什么啊?我只给你读最多9位的数,其它靠边");
      System.exit(-1);
      }
      }
      //用于判断万位,十万位,百万位,千万位是不是都为零;
      public boolean searchNum() {
      boolean allIsZero = true;
      //只有九个数的数,才有可能都为零。如900002222;
      if(integerPart.length() == 9) {
      for(int i=1; i<5; i++) {
      int number = Integer.parseInt(String.valueOf(integerPart.charAt(i)));
      if(number != 0) {
      allIsZero = false;
      break;
      }
      }
      }
      return allIsZero;
      }
     
      //将数字转中文的主要逻辑;
      public String getString() {
      StringBuffer sb = new StringBuffer();
      //用于判断前一位数是不是为零;
      boolean isZeroBefore = false;  
      for (int i = 0; i < integerPart.length(); i++) {
      // 从左到右,得到相应的数字;本来应该写个方法明白点,时间有限,不好意思。这里是先将拿到的字符转成字符串,再转成整型。同理,自查API;
      int number = Integer.parseInt(String.valueOf(integerPart.charAt(i)));
      if (number != 0) {
      isZeroBefore = false;
      // 得到数是多少,加入的中文大写就是多少;
      sb.append(num[number]);
      // 紧接着加入相应的单位;
      sb.append(unit[integerPart.length() - i - 1]);
     
      //这里的条件需要说明:对应的数为零,且之前一位不是零,但万位特殊处理;
      }else if (number == 0 && !isZeroBefore && i != (integerPart.length()-5)) {
      isZeroBefore = true;
      sb.append(num[number]);
     
      //关于对万位的处理;
      }else if (number == 0 && i==(integerPart.length()-5) && !searchNum()) {
      //万位之前的零都去掉;
      while(sb.toString().endsWith("零")) {
      sb.deleteCharAt(sb.length()-1);
      }
      sb.append(unit[integerPart.length() - i - 1]);
      isZeroBefore = false;
      }
      }
     
      //小数部份,直接加数字就行了。
      if (pointPart.length() > 0) {
      sb.append("点");
      for (int i = 0; i < pointPart.length(); i++) {
      int number = Integer.parseInt(String.valueOf(pointPart
      .charAt(i)));
      sb.append(num[number]);
      }
      }
      if (pointPart.length() == 0) {
      sb.append("整");
      }
     
      return sb.toString();
      }
      public static void main(String[] args) {
      System.out.println(new NumToCn("104.19").getString());
      System.out.println(new NumToCn("1004.29").getString());
      System.out.println(new NumToCn("10004.39").getString());
      System.out.println(new NumToCn("100004.49").getString());
      System.out.println(new NumToCn("1000004.59").getString());
      System.out.println(new NumToCn("10000004.69").getString());
      System.out.println(new NumToCn("100000004.79").getString());
      System.out.println(new NumToCn("234534.69").getString());
      System.out.println(new NumToCn("324563634").getString());
      System.out.println(new NumToCn("324456").getString());
      System.out.println(new NumToCn("456").getString());
      }
     
     }
      

  2.   

    www.cnblogs.com/codejar/archive/2012/02/15/2352606.html