BigDecimal
因为double类型所定义的浮点数并不是精确的,比如在定义一个double类型a=1.0,b=0.9,a-b的结果并不会等于0.1而是0.9999999998
所以在进行浮点数的精确计算时,就不能用double或者float,而是BigDecimal
public class Demo04 { public static void main(String[] args) { double a = 1.0; double b = 0.9; System.out.println(a-b);//结果为0.099999999999998 //BigDecimal,大的浮点数精确计算 BigDecimal b1 = new BigDecimal("1.0"); BigDecimal b2 = new BigDecimal("0.9"); //减法 BigDecimal r1 = b1.subtract(b2); System.out.println(r1); //0.1 //加法 BigDecimal r2 = b1.add(b2); System.out.println(r2); //1.9 //乘法 BigDecimal r3 = b1.multiply(b2); System.out.println(r3); //0.98 //除法,执行除法运算时,除不尽会报错 BigDecimal r4 = new BigDecimal("1.4") .subtract(new BigDecimal("0.5")) .divide(new BigDecimal("0.9")); System.out.println(r4); //1 //除不尽时 保留两位小数 四舍五入 BigDecimal r5 = new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP); System.out.println(r5); //3.33 } }
浙公网安备 33010602011771号