【发布时间】:2013-06-12 08:59:55
【问题描述】:
我是单元测试的新手,我决定编写一个简单的计算器来研究这些概念,但我遇到了一个对我来说毫无意义的问题。 STAssertEquals 因 2 个显然相同的双精度值而失败。 我得到的错误是这个: “-2.89”应该等于“-2.89”:
执行计算的代码是:
- (double)calculateOperation:(int)operation numberA:(double)numA numberB:(double)numB
{
double result = 0;
switch(operation)
{
case addition:
result = numA + numB;
break;
case subtraction:
result = numA - numB;
break;
case multiplication:
result = numA * numB;
default:
break;
}
return result;
}
测试是
- (void)testSubtraction
{
//Two double positive values
double test1 = [calculator calculateOperation:subtraction numberA:4.45 numberB:7.34];
STAssertEquals(test1, -2.89, nil);
}
我尝试了不同的值,但似乎只有特定范围的值会导致 STAssertEquals 失败。
但是,如果我执行 STAssertEquals((4.45 - 7.34), -2.89, nil) 它可以正常工作。
我真的不知道怎么了。
【问题讨论】:
-
尝试在你的断言中将 -2.89 转换为 double... (double)-2.89。
-
使用
NSLog()记录test1。 -
可能是浮点精度问题?
-
我尝试使用 (double)-2.89,但没有成功。我尝试将结果与 NSLog() 打印的数字进行比较,即 -2.890000,但它也不起作用。我知道双精度和浮点类型存在一些点精度问题;但如果是这种情况,返回值不应该略有不同吗?像 -2.89000001 还是类似的?
-
Pedantry:减法只有一个
s,而且在开头。