2012-02-08 7 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

Какой язык программирования это? Пожалуйста, отметьте соответствующим образом. –

+0

@Hamid R: Получил ли какой-либо ответ решение? –

ответ

0

Первый аргумент - ожидаемое значение, второе - действительное значение, а третий параметр assertEquals - приемлемая дельта. Вы можете сделать это .01 или что вам нужно.

Так что ваше заявление должно быть что-то вроде

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

удваивается и поплавков почти всегда не будет точное количество вы думаете, какие они есть. Это связано с тем, что с 32/64 бит может быть представлено только очень много точных чисел. Всегда есть бесконечный количество цифр, которые не могут быть представлены точно. Вот почему вам нужна дельта.

0

В основном я определяю AssertAlmostEqual вместе с параметром, который определяет точность (или аргумент по умолчанию).

например. def AssertAlmostEquals (значение1, значение2, точность = 0,000001): assertEquals (abs (значение1 - значение2) < точность)

Смежные вопросы