首先看一个例子:
package BigDecimalDemo;
public class Demo {
public static void main(String[] args) {
double d1 = 0.05;
double d2 = 0.02;
System.out.println(d1 - d2);
}
}
输出结果为:
0.030000000000000002
这是由于float、double类型在进行计算时存在精度丢失问题,那如何解决呢?
package BigDecimalDemo;
import java.math.BigDecimal;
public class Demo {
public static void main(String[] args) {
double d1 = 0.05;
double d2 = 0.02;
BigDecimal bigDecimal1 = new BigDecimal(String.valueOf(d1));
BigDecimal bigDecimal2 = new BigDecimal(String.valueOf(d2));
System.out.println(bigDecimal1.subtract(bigDecimal2).doubleValue());
}
}
输出结果为:
0.03
但需要特别注意,一定要使用参数为string的构造函数,不然仍会有问题,如下:
package BigDecimalDemo;
import java.math.BigDecimal;
public class Demo {
public static void main(String[] args) {
double d1 = 0.05;
double d2 = 0.02;
BigDecimal bigDecimal1 = new BigDecimal(d1);
BigDecimal bigDecimal2 = new BigDecimal(d2);
System.out.println(bigDecimal1.subtract(bigDecimal2).doubleValue());
}
}
输出结果为:
0.030000000000000002