public class bigdecimalDemon1 {
    public static void main(String[] args) {
    /*
    构造方法获取对象
    public BigDecimal(double val)
    public BigDecimal(String val)

    静态方法获取对象
    public static BigDecimal valueOf(double val)
     */

        //1.通过传递小数类型的数据获取对象(这种方式有可能是不精确的)
        BigDecimal bd1=new BigDecimal(0.1);
        BigDecimal bd2=new BigDecimal(0.1);
        System.out.println(bd1);//0.1000000000000000055511151231257827021181583404541015625
        System.out.println(bd2);//0.1000000000000000055511151231257827021181583404541015625

        //2.通过传递字符串类型的数据获取对象(这种方式是精确的)
        BigDecimal bd3=new BigDecimal("0.1");
        BigDecimal bd4=new BigDecimal("0.1");
        System.out.println(bd3);//0.1
        System.out.println(bd4);//0.1

        BigDecimal bd5=bd3.add(bd4);
        System.out.println(bd5);//0.2
        BigDecimal bd6=bd3.subtract(bd4);
        System.out.println(bd6);//0.0

        //3.通过静态方法获取对象
        BigDecimal db7 = BigDecimal.valueOf(0.2);
        System.out.println(db7);//0.2
        BigDecimal db8 = BigDecimal.valueOf(10);
        System.out.println(db8);//10

        //如果超出double的范围建议使用构造方法,没有则使用静态方法
        //如果传递的是0-10之间的整数,方法会返回创建好的对象,不会new一个新的对象
        BigDecimal bd9=BigDecimal.valueOf(10);
        System.out.println(db8==bd9);//true

        //除法(可除尽的可以直接算除不尽的要加精度)
        BigDecimal bd10=BigDecimal.valueOf(3);
        BigDecimal bd11=db8.divide(bd10,3, RoundingMode.HALF_UP);//保留3位小数,四舍五入
        System.out.println(bd11);//3.333
        //UP:向远离零的方向舍入
        //DOWN:向接近零的方向舍入
        //CEILING:向正无穷方向舍入
        //FLOOR:向负无穷方向舍入
        //HALF_UP:向最接近数字方向舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式
        //HALF_DOWN:向最接近数字方向舍入,如果与两个相邻数字的距离相等,则为向下舍入的舍入模式
        

    }
}