Bigdecimal转double会有精度丢失吗?

我想用java计算回归模型的准确率,公式如下:
1 – ( ||实际值 - 预测值|| / ||实际值|| )

代码如下:

        BigDecimal data2 = new BigDecimal("2.11");
        BigDecimal data3 = data1.subtract(data2).abs();
        BigDecimal data4 = data3.divide(data1.abs(), 16, RoundingMode.HALF_UP);
        BigDecimal data5 = new BigDecimal("1.0");
        BigDecimal data6 = data5.subtract(data4);
        System.out.println(data6);
        System.out.println(data6.doubleValue())

但是最后一步Bigdecimal转double,转换前后数值却不同,是丢失精度了吗?
打印输出如下:(最后一位数不同,第一行是Bigdecimal类型,第二行是double类型)

img

请问怎样才能不丢失精度呢?

保留精度的一律用BigDecimal类型。

高精度的直接用整数的分处理

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:Bigdecimal 相加结果为0的解决
  • 除此之外, 这篇博客: Java BigDecimal类的一般使用、BigDecimal转double中的 BigDecimal转double 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    public double doubleValue()

    然而BigDecimal只是解决精度问题的手段,获取double数据才是我们的目的

    double rs = bigc.doubleValue();
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^