首先看几个例子
eg1.
BigDecimal a = new BigDecimal("0.08");
System.out.println(a.setScale(2, RoundingMode.UP)); //输出0.08
BigDecimal b = new BigDecimal(0.08);
System.out.println(b.setScale(2, RoundingMode.UP)); //输出0.09
eg2.
BigDecimal a = new BigDecimal("0.00");
BigDecimal b = new BigDecimal(0.00);
System.out.println(a.equals(BigDecimal.ZERO)); //false
System.out.println(b.equals(BigDecimal.ZERO)); // 输出true
new BigDecimal("0.00")
和 new BigDecimal(0.00)
调用的构造函数是不一样的
new BigDecimal("0.00")
调用的构造函数
public BigDecimal(String val) {
this(val.toCharArray(), 0, val.length());
}
new BigDecimal(0.00)
调用的构造函数
public BigDecimal(double val) {
this(val,MathContext.UNLIMITED);
}
官方说明
官方建议
- 使用BigDecimal(String val)构造方法,此构造方法可预知,BigDeciaml(double val)构造方法不可预知
- 若一定要使用BigDecimal(double vale)构造方法,它提供了一个准确转换
- 先使用Double.toString(double) 方法
- 然后使用BigDecimal(String)构造方法,将double转换为String
要获取该结果,请使用static valueOf(double)方法