2012-02-08 82 views
1

我有一个快速的问题:assertEquals的准确性?

/** 
* 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。我如何在assert测试位中降低这个准确度?

+0

这是什么编程语言?请适当标记。 – 2012-02-08 17:08:26

+0

@哈米德R:有没有答案提供解决方案? – 2013-02-06 12:41:33

回答

0

第一个参数是期望值,第二个参数是实际值,assertEquals的第三个参数是可接受的增量。你可以制作它.01或任何你需要的。

所以你的说法应该是这样

assertEquals(39.23, a1(32.56, 45.90), 0.1);

双打和花车几乎永远不会是你觉得他们的确切人数。这是因为使用32/64位时,只能表示很多确切的数字。总有一个无限不能表示的数字正好。这就是为什么你需要三角洲。

0

我主要定义一个AssertAlmostEqual和一个定义精度(或默认参数)的参数。

例如 def AssertAlmostEquals(value1,value2,accuracy = 0.000001): assertEquals(abs(value1 - value2)< accuracy)