2011-03-28 22 views
1

我的iPhone有一行的代码如下所示:绝对值不工作

double decimal2 = abs(newLocation.coordinate.longitude - degrees); 

我想确保decimal2的值始终为正。但是,decimal2当前是-82。

任何人都可以解释这一点吗?我没有对decimal2的值做任何其他的事情。

谢谢。

回答

4

会建议你使用NSDecimalNumber

您可以使用NSDecimalNumber类的内置功能,以-1适当数量比较零,然后乘以。例如:

- (NSDecimalNumber *)abs:(NSDecimalNumber *)num { 
    if [myNumber compare:[NSDecimalNumber zero]] == NSOrderedAscending) { 
     // Number is negative. Multiply by -1 
     NSDecimalNumber * negativeOne = [NSDecimalNumber decimalNumberWithMantissa:1 
                      exponent:0 
                     isNegative:YES]; 
     return [num decimalNumberByMultiplyingBy:negativeOne]; 
    } else { 
     return num; 
    } 
} 
在这种情况下

,没有精密

2

也许这个“abs”函数不是你认为的那样。你确定你知道它来自哪里吗?也许你或其他人定义了你自己的?没有理由为什么有效的“abs”函数会这样做。

+0

我借用了一个例子中的代码。但我不明白它是如何操作绝对值函数的。 – rottendevice 2011-03-28 03:39:12

2

您使用的是ABS()函数,该函数返回INT,但分配结果的双重损失。您应该将结果分配给int类型的变量,或者使用返回double的绝对值函数版本:double fabs(double)