仅当值为“0.18”的值“v1”与值“v2”(具有“-14.13”等负值)相加时,Solr聚合和才会显示字段的高精度值。
正确的答案应该是-13.95。
但它给出了-13.9500000000000000001。
答案 0 :(得分:1)
Java中的双精度只是近似值。如果空间有限,您将始终能够找到存在舍入错误的情况。如果您运行代码System.out.println("Double sum: " + (0.18d + -14.13d));
,您将获得与Solr提供的相同的结果:-13.950000000000001。
可以通过在Solr中使用BigDecimal或类似方法来补救或至少改进,但这将是空间和速度的非常高的成本。使用浮点时,标准做法是允许出现轻微差异。两者都在比较数字并将其写出来。