数目字大小写转换

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

------解决方案--------------------
写的不是很清楚,尽量看吧,希望能帮到你,i

Java code
public 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());
     }
 
 }

阅读