直接用我的代码和结果描述一下问题吧:
代码:
/** * Created by zhangx-ae on 2016/5/17. */
public class DemoTest {
public static void main(String[] args) {
BigDecimal a = new BigDecimal(1000000);
BigDecimal b = a.multiply(new BigDecimal(0.21));
System.out.println(b);
}
}
结果:
209999.9999999999922284388276239042170345783233642578125000000
我想要的结果是210000.00,应该如何处理结果呢?
实际上这是BigDecimal将double转化为Bigdecimal时出的问题,这是因为0.21不能够精确的表示double值,使用BigDecimal将double转化为精确值的时候所得的结果就会是0.2099999999999999922284388276239042170345783233642578125,所以相乘以后结果会是那个样子。
将String转为BigDecimal的时候,字符串是多少,结果就是多少,因此想要将double类型的数据转为BigDecimal的时候,这样做也许才是你想要的结果:
BigDecimal b = new BigDecimal(String.valueOf(0.21));
结果:
210000.00