zoukankan      html  css  js  c++  java
  • JAVA BigDecimal 用法

    一、BigDecimal 的加减乘除

    BigDecimal bignum1 = new BigDecimal("10"); 
    BigDecimal bignum2 = new BigDecimal("5"); 
    BigDecimal bignum3 = null; 
     
    //加法 
    bignum3 = bignum1.add(bignum2); 
    System.out.println("和 是:" + bignum3); 
     
    //减法 
    bignum3 = bignum1.subtract(bignum2); 
    System.out.println("差 是:" + bignum3); 
     
    //乘法 
    bignum3 = bignum1.multiply(bignum2); 
    System.out.println("积 是:" + bignum3); 
     
    //除法 
    bignum3 = bignum1.divide(bignum2); 
    System.out.println("商 是:" + bignum3); 

    运行结果为:

    二、BigDecimal 的比较大小。

    BigDecimal num1 = new BigDecimal("0"); 
    BigDecimal num2 = new BigDecimal("1"); 
    BigDecimal num3 = new BigDecimal("2"); 
     
    BigDecimal num = new BigDecimal("1"); //用做比较的值 
     
    System.out.println(num1.compareTo(num)); //小于 时,返回 -1 
    System.out.println(num2.compareTo(num)); //等于 时,返回 0 
    System.out.println(num3.compareTo(num)); //大于 时,返回 1 

    这是输出结果:

    解释下注释里面了。

    补充:

    BigInteger 也可以存放比较大的数, 和 BigDecimal 的区别是 :BigInteger 存放的是大的整数,而BigDecimal 存放大的小数

    继续补充一下,用BigDecimal 写个for循环。

    for (BigDecimal i = new BigDecimal("0"); i.compareTo(new BigDecimal("10")) != 1; i = i.add(new BigDecimal("1"))) { 
     System.out.print(i + "	"); 
    } 

    控制台打印的是从0 到 10 。

    三、Java中的BigDecimal使用注意事项

    1.BigDecial是immutable的,就像String一样,它的所有操作都会生成一个新的对象,所以

     amount.add( thisAmount );

    是错误的;而应该是:

     amount = amount.add( thisAmount );

    2. 不要用equals方法来比较BigDecimal对象,因为它的equals方法会比较scale,如果scale不一样,它会返回false;

    例如:

     BigDecimal a = new BigDecimal("2.00");
     BigDecimal b = new BigDecimal("2.0");
     print(a.equals(b)); // false

    所以你应该使用compareTo()和signum()方法

     a.compareTo(b); // returns (-1 if a < b), (0 if a == b), (1 if a > b)
     a.signum(); // returns (-1 if a < 0), (0 if a == 0), (1 if a > 0)

    3. 使用BigDecimal的字符串构造函数,不要使用double参数的构造函数,否则的话会出现你不想要的结果。

    例如下面的代码分别使用double和String的构造函数,然后使用HALF_EVEN的round方法,但是输出结果不一样:

    System.out.println("=================="); 
    for(int i = 0; i < 10; i ++) { 
     StringBuffer sb = new StringBuffer(); 
     sb.append("0."); 
     sb.append(i); 
     sb.append("5"); 
     BigDecimal bdx = new BigDecimal(sb.toString()); 
     System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN)); 
    } 
     
    System.out.println("=================="); 
    for(int i = 0; i < 10; i ++) { 
     StringBuffer sb = new StringBuffer(); 
     sb.append("0."); 
     sb.append(i); 
     sb.append("5"); 
     BigDecimal bdx = new BigDecimal(Double.valueOf(sb.toString())); 
     System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN)); 
    } 

    输出是:

    ==================
    0.05 0.0
    0.15 0.2
    0.25 0.2
    0.35 0.4
    0.45 0.4
    0.55 0.6
    0.65 0.6
    0.75 0.8
    0.85 0.8
    0.95 1.0
    ==================
    0.05 0.1
    0.15 0.1
    0.25 0.2
    0.35 0.3
    0.45 0.5
    0.55 0.6
    0.65 0.7
    0.75 0.8
    0.85 0.8
    0.95 0.9
  • 相关阅读:
    mac系统下 Homebrew 使用
    mac上安装nginx
    DOMContentLoaded 和 Load 事件 区别(待补充)
    JavaScript运行机制
    理解js事件循环(event loop)
    理解js闭包
    nginx 知识点
    014_mac下的端口查看
    003_如何正确的进入容器
    002_docker构建zookeeper环境
  • 原文地址:https://www.cnblogs.com/max-hou/p/10751835.html
Copyright © 2011-2022 走看看