java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java new BigDecimal

注意Java中 new BigDecimal(double val) 的使用

作者:​ 编程大椰子  ​

这篇文章主要介绍了注意Java中 new BigDecimal(double val) 的使用,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下

前言:

今天下午跑单元测试报错,发现一个关于 new BigDecimal(double val) 的代码问题,总结下。

问题

业务代码:

/**
 * 校验价格是否一致
 *
 * @param frontPrice 前端商品价格
 * @param realPrice  商品系统价格
 * @return boolean  true 相等
 */
public static boolean comparePrice(BigDecimal frontPrice, BigDecimal realPrice) {
    return frontPrice.compareTo(realPrice) == 0;
}

测试代码:

/**
 * 前端价格
 */
BigDecimal forntPrice = new BigDecimal(0.2);

然后测试 comparePrice 方法总是返回 false,frontPrice 和 realPrice 明明是相等的, 都是0.2。

经过断点排查问题发现 frontPrice 的值不是 0.2,而是 0.200000000000000011102230246251565404236316680908203125 。

我靠,怎么出现这种情况,BigDecimal 不是精准运算的吗?

解决

查看相关文档:

简单翻一下:

将 double 类型转换成 BigDecimal 类型。

总结

将 double 类型转换为 BigDecimal 类型的时候,不要使用new BigDecimal(0.1)这个构造函数,应为它得到的结果是不精确的,

使用BigDecimal.valueOf(0.1)new BigDecimal("0.1") 。

使用 IDEA 编码的时候会给警告提示:

到此这篇关于注意Java中 new BigDecimal(double val) 的使用的文章就介绍到这了,更多相关Java new BigDecimal内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文