0

我的应用程序中有 pow() 的愚蠢问题。这是代码:

double xf = 0.0153846154;

NSLog(@"%.10f", xf);
if (abs(xf) < (5.0 * pow(10.0, -9.0))) {
    NSLog(@"%.10f", 5.0 * pow(10.0, -9.0));
}

但是如果我尝试这个比较是正确的:

if (abs(xf) >= pow(10.0, 10.0)) {
    NSLog(@"%f", pow(10.0, 10.0));
}

我的日志是:

2012-10-13 15:45:24.587 myApp[22941:c07] 0.0153846154
2012-10-13 15:45:28.950 myApp[22941:c07] 0.0000000050

有人可以解释一下为什么 0.0153846154 < 0.0000000050

4

1 回答 1

4

abs是一个整数函数,因此xf被截断为0,因此函数结果为0,然后将其转换回以0.0进行比较。

您需要使用fabs

NSLog(@"%.10f", xf);
if (fabs(xf) < (5.0 * pow(10.0, -9.0))) {
    NSLog(@"%.10f", 5.0 * pow(10.0, -9.0));
}
于 2012-10-13T14:08:54.713 回答