当float和double类型在进行减法运算时,会出现精度丢失问题,这种问题主要是由于计算机中普遍使用2进制所造成的。在此做为记录,防止日后遗忘。
public static void main(String[] args) {
float a = 2.1f;
float b = 2.0f;
float c = a - b;
System.out.println("a-b=" + c);
}
//输出:a-b=0.099999905
这种情况下需要使用BigDecimal类
BigDecimal add(BigDecimalaugend) 加法运算
BigDecimal subtract(BigDecimal subtrahend) 减法运算
BigDecimal multiply(BigDecimal multiplicand) 乘法运算
BigDecimal divide(BigDecimal divisor) 除法运算
public static void main(String[] args) {
float a = 2.1f;
float b = 2.0f;
BigDecimal a1 = new BigDecimal(Float.toString(a));
BigDecimal b1 = new BigDecimal(Float.toString(b));
float c1 = a1.subtract(b1).floatValue();
System.out.println("a1-b1=" + c1);
}
//输出:a1-b1=0.1
详细原理参照http://www.blogjava.net/jelver/articles/340038.html
转载于:https://blog.51cto.com/zuohao1990/1560642