BigDecimal

BigDecimal支持数据类型转换

通过new BigDecimal构造方法

BigDecimal支持加减乘除操作

对应的默认小数点位数

Preferred Scales for Results of Arithmetic Operation
OperationPreferred Scale of Result
Addmax(addend.scale(), augend.scale())
Subtractmax(minuend.scale(), subtrahend.scale())
Multiplymultiplier.scale() + multiplicand.scale()
Dividedividend.scale() - divisor.scale()

如下操作了一下BigDecimal对浮点数的操作

        System.err.println(4&12);
        System.err.println("19/10 = "+ new BigDecimal(19).divide(new BigDecimal(10)));
        System.err.println("21/110= "+ new BigDecimal(21).divide(new BigDecimal(110),3, RoundingMode.HALF_UP));
        System.err.println("new BigDecimal(0.11) 结果 ->"+new BigDecimal(0.11));
        System.err.println("new BigDecimal(Double.toString(0.11)) 结果 ->"+new BigDecimal(Double.toString(0.11)));
        System.out.println();
        System.err.println(new BigDecimal(0.11,new MathContext(23,RoundingMode.HALF_UP)));
        System.err.println(new BigDecimal(0.11).setScale(23,RoundingMode.HALF_UP));
        System.out.println();
        System.err.println(new BigDecimal(Double.toString(0.11),new MathContext(23,RoundingMode.HALF_UP)));
        System.err.println(new BigDecimal(Double.toString(0.11)).setScale(23,RoundingMode.HALF_UP));

需要注意的点

数据转换时,浮点数要转成String类型,否则精度不一致
尤其除法操作时,若商无限死循环,在没有设定小数位时降抛异常

posted @ 2020-05-13 21:45  VVII  阅读(173)  评论(0)    收藏  举报