Chinaunix首页 | 论坛 | 博客
  • 博客访问: 466552
  • 博文数量: 1496
  • 博客积分: 79800
  • 博客等级: 大将
  • 技术积分: 9940
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 13:22
文章分类

全部博文(1496)

文章存档

2011年(1)

2008年(1495)

我的朋友

分类:

2008-09-09 13:31:19

    public class Trans2RMB {

     /**

      * 测试程序的可行性

      * @param args

      */

     public static void main(String[] args) {

      System.out.println("--------将数字转换成中文金额的大写形式------------\n");

      Trans2RMB t2r = new Trans2RMB();

      String s = t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));

      // 如果转换过后是一个空串,则不输出屏幕

      if(!"".equals(s)) {

       System.out.println("转换成中文后为:" + s);;

      }

      System.out.println("\n---------------------------------------------");

     }

     /**

      * 从命令行接收一个数,在其中调用 checkNum() 方法对其进行

      * 验证,并返回相应的值

      * @return 如果输入合法,返回输入的这个数

      */

     private String getNum() {

      String s = null;

      System.out.println("请输入一个数字(精确到小数点后两位):");

      // 从命令行输入这个浮点数

      java.util.Scanner scanner = new java.util.Scanner(System.in);

      s = scanner.next();

      // 判断用户输入是否合法

      // 若合法,返回这个值;若非法返回 "0"

      if(this.checkNum(s)) {

       return s;

      } else {

       return "";

      }

     }

     /**

      * 判断用户输入的数据是否合法,用户只能输入大于零的数字,不能输入其它字符

      * @param s String

      * @return 如果用户输入数据合法,返回 true,否则返回 false

      */

     private boolean checkNum(String s) {

      // 如果用户输入的数里有非数字字符,则视为非法数据,返回 false

      try {

       float f = Float.valueOf(s);

       // 如果这个数小于零则视为非法数据,返回 false

       if(f < 0) {

        System.out.println("非法数据,请检查!");

        return false;

       }else {

        return true;

       }

      } catch (NumberFormatException e) {

       System.out.println("非法数据,请检查!");

       return false;

      }

     }

 

     /**

      * 把用户输入的数以小数点为界分割开来,并调用 numFormat() 方法

      * 进行相应的中文金额大写形式的转换

      * 注:传入的这个数应该是经过 roundString() 方法进行了四舍五入操作的

      * @param s String

      * @return 转换好的中文金额大写形式的字符串

      */

     private String splitNum(String s) {

      // 如果传入的是空串则继续返回空串

      if("".equals(s)) {

       return "";

      }

      // 以小数点为界分割这个字符串

      int index = s.indexOf(".");

      // 截取并转换这个数的整数部分

      String intOnly = s.substring(0, index);

      String part1 = this.numFormat(1, intOnly);

      // 截取并转换这个数的小数部分

      String smallOnly = s.substring(index + 1);

      String part2 = this.numFormat(2, smallOnly);

      // 把转换好了的整数部分和小数部分重新拼凑一个新的字符串

      String newS = part1 + part2;

      return newS;

     }

     /**

      * 对传入的数进行四舍五入操作

      * @param s String 从命令行输入的那个数

      * @return 四舍五入后的新值

      */

     private String roundString(String s) {

      // 如果传入的是空串则继续返回空串

      if("".equals(s)) {

       return "";

      }

      // 将这个数转换成 double 类型,并对其进行四舍五入操作

      double d = Double.parseDouble(s);

      // 此操作作用在小数点后两位上

      d = (d * 100 + 0.5) / 100;

      // 将 d 进行格式化

      s = new java.text.DecimalFormat("##0.000").format(d);

      // 以小数点为界分割这个字符串

      int index = s.indexOf(".");

      // 这个数的整数部分

      String intOnly = s.substring(0, index);

      // 规定数值的最大长度只能到万亿单位,否则返回 "0"

      if(intOnly.length() > 13) {

       System.out.println("输入数据过大!(整数部分最多13位!)");

       return "";

      }

      // 这个数的小数部分

      String smallOnly = s.substring(index + 1);

      // 如果小数部分大于两位,只截取小数点后两位

      if(smallOnly.length() > 2) {

       String roundSmall = smallOnly.substring(0, 2);

       // 把整数部分和新截取的小数部分重新拼凑这个字符串

       s = intOnly + "." + roundSmall;

      }

      return s;

     }

[1]    

【责编:landy】

--------------------next---------------------

阅读(115) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~