BigDecimal 乘法问题

来源:互联网 发布:多益网络账号注册 编辑:程序博客网 时间:2024/05/21 08:54

直接用我的代码和结果描述一下问题吧:

代码:

/** * 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
0 0