java项目中的计算还在用double吗?加减乘除丢失精度,计算不准确?BigDecimal你值得了解一下

package com.example.demo.utils;

import java.math.BigDecimal;

/**

* 测试计算

*

* @author tzj

* @create 2018-07-20 16:33

**/

public class TestBigDecimal {

public static void main(String[] args) {

BigDecimal a=new BigDecimal("1");

BigDecimal b=new BigDecimal("2");

System.out.println("a+b="+a.add(b));

System.out.println("a-b="+a.subtract(b));

System.out.println("a*b="+a.multiply(b));

System.out.println("a/b="+a.divide(b));

//把a保留两位小数

a=a.setScale(2,BigDecimal.ROUND_HALF_UP);

System.out.println(a.intValue());

/*setScale(1)表示保留一位小数,默认用四舍五入方式

setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3

setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4

setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4

setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍

setScaler(1,BigDecimal.ROUND_CEILING)接近正无穷大的舍入

setScaler(1,BigDecimal.ROUND_FLOOR)接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样

setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。*/

//null参与运算报错java.lang.NullPointerException

BigDecimal c = BigDecimal.ZERO;

BigDecimal d =null;

System.out.println("测试:"+d.add(c));

}

}

猜你喜欢

转载自blog.csdn.net/qq_33230584/article/details/81536909