我有一个简单的问题:
/**
* Method a1
*
* @param p1 A parameter
* @param p2 A parameter
* @return The return value
*/
public double a1(double p1, double p2) {
return (p1 + p2) / 2;
}
@Test
public void testa1() {
assertEquals(0, a1(32.56, 45.90), 0.0 );
}
一直给我一个很长的值39.23000000000000004。如何在断言测试位中降低其精度?
答案 0 :(得分:0)
第一个参数是期望值,第二个参数是实际值,assertEquals的第三个参数是可接受的delta。你可以将它.01
或任何你需要的东西。
所以你的陈述应该是
assertEquals(39.23, a1(32.56, 45.90), 0.1 );
双打和花车几乎总是不是你认为的确切数字。这是因为32/64位只能表示那么多精确数字。 无限数字总是无法用完全表示。这就是你需要delta的原因。
答案 1 :(得分:0)
我主要定义一个AssertAlmostEqual以及一个定义精度(或默认参数)的参数。
e.g。 def AssertAlmostEquals(value1,value2,accuracy = 0.000001): assertEquals(abs(value1 - value2)< accuracy)