Java--BigDecimal(精确浮点数)

BigDecimal

  • 位置:java.math包中
  • 作用:精确计算浮点数
  • 创建方式:BigDecimal  bd = new BigDecimal("1.0");//这里要用字符串
  • 常用方法:
    • 加:BigDecimal add(BigDecimal bd)
    • 减:BigDecimal subtract(BigDecimal bd)
    • 乘:BigDecimal multiply(BigDecimal bd)
    • 除:BigDecimal divide(BigDecimal bd) 注意:遇到除不尽的情况,需要保留小数位数 
    • 除不尽:BigDecimal divide(BigDecimal bd,int scal,RoundingMode mode)
    • 参数scal:指定精确到小数点后几位
    • 参数mode:指定小数部分的取舍模式,通常采用四舍五入的模式(BigDecimal.ROUND_HALF_UP)

 

package com.monv.str;

import java.math.BigDecimal;

public class TestBigDec {
    public static void main(String[] args) {
        double d1 = 1.0;
        double d2 = 0.9;
        System.out.println(d1-d2);//0.09999999999999998 
        
        double d3 = (1.4-0.5)/0.9;
        System.out.println(d3);//0.9999999999999999
        //为什么上边的两个结果都不为0.1和1呢? 因为double存储的是近似值 是不准确的 
        //在实际中会需要精确运算,double就不再适用,需要用BigDecimal
        //BigDecimal 大的浮点数精确计算
        BigDecimal bd1 = new BigDecimal("1.0");//构造方法要用String的
        BigDecimal bd2 = new BigDecimal("0.9");
        //减法
        BigDecimal r1 = bd1.subtract(bd2);//做减法不能直接减,需要用subtract来计算
        System.out.println("bd1-bd2:"+r1);
        //加法
        BigDecimal r2 = bd1.add(bd2);
        System.out.println("bd1+bd2:"+r2);
        //乘法
        BigDecimal r3 = bd1.multiply(bd2);
        System.out.println("bd1*bd2:"+r3);
        //除法
        BigDecimal r4 = new BigDecimal("1.4")
              .subtract(new BigDecimal("0.5"))
              .divide(new BigDecimal("0.9"));
        System.out.println("除法(除尽):"+r4);
        //除不尽的情况 如果没写保留几位小数 会报错 divide(除数,保留位数,保留小数的方式) BigDecimal.ROUND_HALF_UP:四舍五入                    
        BigDecimal r5 = new BigDecimal("20").divide(new BigDecimal("3"), 2, BigDecimal.ROUND_HALF_UP);
        System.out.println("除不尽保留小数:"+r5);
    }
}
------------------------------
结果:
0.09999999999999998
0.9999999999999999
bd1-bd2:0.1
bd1+bd2:1.9
bd1*bd2:0.90
除法(除尽):1
除不尽保留小数:6.67

 

posted @ 2020-09-10 11:46  改Bug的小魔女  阅读(227)  评论(0编辑  收藏  举报