我有一个很长的双精度和,它产生一个输出。当我执行E2E测试时,问题出现了,我的本地环境得到了一定数量的小数的结果,但在开发机器中,尽管它具有相同的体系结构和相同的java版本,小数不匹配某些总和。
例如:
match failed: EQUALS
$ | not equal (NUMBER:NUMBER)
6764785.117418662 ---> dev
6764785.11741866 ---> Local
match failed: EQUALS
$ | not equal (NUMBER:NUMBER)
9.7787576643837 ---> dev
9.778757664383699 ---> Local
match failed: EQUALS
$ | not equal (NUMBER:NUMBER)
2.0465350497710526 ---> dev
2.046535049771075 ---> Local
这些只是一些例子。
我正在使用openjdk版本"11.0.15";2012-04-19 from temurin
我也尝试了另一个java版本,但它一直发生相同的。你知道我做错了什么吗?也使用intelliJ最新版本
我们的计算机不能存储double类型的精确表示。它们必须四舍五入才能保存。这就是为什么直接将它们与==进行比较可能会产生意想不到的结果。你可以在这里阅读更多关于这个话题。
java中正确比较双精度类型的例子:
double epsilon = 0.000001d;
assertThat(Math.abs(d1 - d2) < epsilon).isTrue();