浮点数运算出现误差的解决方案

    直接上代码

public static void main(String[] args){
		Double a = 7.77;
		Double b = 3.33;
		System.out.println(a-b);
		System.out.println(new BigDecimal(a.toString()).subtract(new BigDecimal(b.toString())));
	}

    输出结果

4.4399999999999995
4.44

使用BigDecimal承载数据的类型最好是String类型,否则依然会出现误差

    同时附上加减乘除的方法

public static void main(String[] args){
		Double a = 7.77;
		Double b = 3.33;
		System.out.println(a-b);
		//加
		System.out.println(new BigDecimal(a.toString()).subtract(new BigDecimal(b.toString())));
		//减
		System.out.println(new BigDecimal(a.toString()).add(new BigDecimal(b.toString())));
		//乘
		System.out.println(new BigDecimal(a.toString()).multiply(new BigDecimal(b.toString())));
		//除
		///System.out.println(new BigDecimal(a.toString()).divide(new BigDecimal(b.toString())));
		System.out.println(new BigDecimal(a.toString()).divide(new BigDecimal(b.toString()),BigDecimal.ROUND_HALF_DOWN));
	}

注意在使用除法的时候,要指定舍入模式,否则在除不尽的情况下会报"Non-terminating decimal expansion; no exact representable decimal result"异常

猜你喜欢

转载自blog.csdn.net/weixin_39841589/article/details/82662035