当前位置: 代码迷 >> J2SE >> 数目字大小写转换
  详细解决方案

数目字大小写转换

热度:7846   发布时间:2013-02-25 00:00:00.0
数字大小写转换。
编写一个小程序,将数字转换成中文大写。如,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());     }  }
  相关解决方案