美文网首页
BigDecimal中的大于等于、小于等于及加减乘除

BigDecimal中的大于等于、小于等于及加减乘除

作者: keyuan0214 | 来源:发表于2020-07-08 15:42 被阅读0次
    if(a.compareTo(b) == -1){
        System.out.println("a小于b");
    }
     
    if(a.compareTo(b) == 0){
        System.out.println("a等于b");
    }
     
    if(a.compareTo(b) == 1){
        System.out.println("a大于b");
    }
     
    if(a.compareTo(b) > -1){
        System.out.println("a大于等于b");
    }
     
    if(a.compareTo(b) < 1){
        System.out.println("a小于等于b");
    }
    

    查看compareTo源码发现并无异常处理机制,所以a,b都不可为空,异常需提前处理。

    基础运算:
    
    //加减乘除:
     
    BigDecimal a= new BigDecimal("10");  
    BigDecimal b= new BigDecimal("5");  
      
    //加法  
     a.add(b);       
     
      
    //减法  
     a.subtract(b);  
     
      
    //乘法  
     a.multiply(b);  
     
      
    //除法  
     a.divide(b);  
     
     
    setScale(2) // 表示保留两位小数,默认用四舍五入方式 
    setScale(2,BigDecimal.ROUND_DOWN) // 向下取整
    setScale(2,BigDecimal.ROUND_UP)   // 向上取整
    setScale(2,BigDecimal.ROUND_HALF_UP) // 四舍五入
    setScaler(2,BigDecimal.ROUND_HALF_DOWN) // 四舍五入,如果是5则向下舍
    

    常见错误:

    1、BigDecial的所有操作都会生成一个新的对象:
     
    amount.add( thisAmount );  // 错误
    amount = amount.add( thisAmount ); // 正确
     
     
    2、不要用equals方法来比较BigDecimal对象,因为它的equals方法会比较scale,如果scale不一样,它会返回false;
     
    例如:
    BigDecimal a = new BigDecimal("1.00");
    BigDecimal b = new BigDecimal("1.0");
    print(a.equals(b)); // false
     
     
    3、如果直接使用a.divide(b)除法,有时会报除不尽异常,如下:
     
    BigDecimal a = new BigDecimal(10);
    BigDecimal b = new BigDecimal(3);
    a = a.divide(b); // 错误会报如下异常:java.lang.ArithmeticException: Non-terminating
    decimal expansion; no exact representable decimal result.
    

    相关文章

      网友评论

          本文标题:BigDecimal中的大于等于、小于等于及加减乘除

          本文链接:https://www.haomeiwen.com/subject/qbeccktx.html