在使用浮点数过程中,必须考虑到精度问题
java使用Double类型进行计算时,会出现数值不够精确的情况
如:
Double a1 = 5.1;
Double b1 = 4.9;
System.out.println(a1-b1);
运行结果:
与期待的结果有了一定的偏差。因为计算机是以二进制存储数据的,无法精确的表示浮点数。
要进行精确的浮点数计算需要使用BigDecimal类型
// 方法1:
BigDecimal c = BigDecimal.valueOf(5.1);
BigDecimal d = BigDecimal.valueOf(4.9);
System.out.println(c.subtract(d));
// 方法2:
BigDecimal c2 = new BigDecimal("5.1");
BigDecimal d2 = new BigDecimal("4.9");
System.out.println(c2.subtract(d2));
运行结果:
方法1中,BigDecimal.valueOf方法底层通过Double.toString将数值转换成String类型,然后同方法2一样,使用String值创建对象返回。