关于小数的一些精度问题,这在面试中可能会被问到
import java.math.BigDecimal;
/*
BigDecimal(double val)将double类型的数据封装为BigDecimal对象
BigDecimal(String val)将 BigDecimal 的字符串表示形式转换为 BigDecimal
*/
public class Test {
public static void main(String[] args) {
System.out.println(0.09 + 0.01);//期望值是1.0,但实际并不是,而是无限接近于1.0的数
// 解决方案:
BigDecimal bigDecimal = new BigDecimal("0.09");
BigDecimal bigDecimal1 = new BigDecimal("0.01");
BigDecimal bigDecimal2 = bigDecimal;
BigDecimal bigDecimal3 = bigDecimal2.add(bigDecimal1);
System.out.println(bigDecimal3);
//这里没有用第一个构造方法BigDecimal(double val),因为这样还是有精度问题,只不过是更加精确了
//结果为0.09999999999999999687749774324174723005853593349456787109375
BigDecimal bigDecimal4 = new BigDecimal(0.09);
BigDecimal bigDecimal5 = new BigDecimal(0.01);
BigDecimal add = bigDecimal5.add(bigDecimal4);
System.out.println(add);
}
}
运行结果:
0.09999999999999999
0.10
0.09999999999999999687749774324174723005853593349456787109375