博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

BigDecimal的两个数相乘,看似失精

Posted on 2018-06-12 15:25  年少剑客  阅读(1301)  评论(0编辑  收藏  举报

在工作的过程中遇到了一个问题,那就是BigDecimal的两个数分别为1000和1.3,调用multiply方法将他们相乘,得到的结果竟然是:1300.0000000000000444089209850062616169452667236328125000;这里发现当参数是double时,构造的BigDecimal值实际上等于1.3000000000000000444089209850062616169452667236328125而不是1.3,这是因为1.3无法正确的表示为double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。但是参数为String类型构造的BigDecimal值正好等于原值1.3。因此在构造BigDecimal值时通常选择参数为String类型的构造方法。

如果double必须作为Bigdecimal的参数时,可以先使用Double.toString(double)方法将double转换为String,然后使用BigDecimal(String)方法。再使用BigDecimal.valueOf(double)方法获取值。参考原博客:https://blog.csdn.net/akkzhjj/article/details/45370425