2011-03-28 70 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)