Tag: of evaluation

使用双精度时,为什么不(x /(y * z))与(x / y / z)相同?

这部分是学术性的,就我的目的而言,我只需将它四舍五入到小数点后两位; 但我很想知道结果会产生两个略有不同的结果。 这是我写的测试,以缩小到最简单的实现: @Test public void shouldEqual() { double expected = 450.00d / (7d * 60); // 1.0714285714285714 double actual = 450.00d / 7d / 60; // 1.0714285714285716 assertThat(actual).isEqualTo(expected); } 但它输出失败了: org.junit.ComparisonFailure: Expected :1.0714285714285714 Actual :1.0714285714285716 任何人都可以详细解释在引擎盖下发生的事情导致1.000000000000000 X的值不同吗? 我在答案中寻找的一些要点是:精度丢失在哪里? 首选哪种方法,为什么? 哪个是正确的? (在纯数学中,两者都不对。也许两者都错了?)这些算术运算有更好的解决方案或方法吗?