2011-10-04 38 views
0

我有以下方法失敗。我認爲我正在比較double與int,但確實知道最好的方法。如何比較目標C中的雙打?

-(BOOL)isValidCoordinate:(CLLocationCoordinate2D)coordinate 
{ 
    //Always fail first condition here. 
    if (coordinate.latitude > -90 && coordinate.latitude< 90) { 
     [NSException raise:@"Invalid latitude value" format:@"Latitude of %d is invalid", coordinate.latitude]; 
    } 

    if (coordinate.longitude > -180 && coordinate.longitude < 180) { 
     [NSException raise:@"Invalid longitude value" format:@"Longitude of %d is invalid", coordinate.longitude]; 
    } 

    [NSException raise:@"Invalid longitude value blash " format:@"Longitude of %d is invalid asd", coordinate.longitude]; 
    return TRUE; 
} 
+1

它是如何失敗的? – Mark

+0

如果我的coordinate.latitude是-30.99986,那麼它會使它大於-90的3099986並引發異常。 –

+0

好吧,你手動引發一個異常[NSException raise:@「無效的緯度值」格式:@「%d的緯度無效」,coordinate.latitude]; –

回答

2

你的比較應該可以工作。比較前,編譯器會將整數轉換爲浮點數。如果你想確保你可以把它改成:

if (coordinate.latitude > -90.0 && coordinate.latitude< 90.0) 

但你的主要問題,我想,是你報告錯了號碼。 %d以格式字符串告訴它打印整數。你需要告訴它輸出一個浮點數:

[NSException raise:@"Invalid latitude value" format:@"Latitude of %f is invalid", coordinate.latitude]; 
+0

感謝很多朋友簡單的問題和人們給我跑:)這完全正確。 –

1

問題不在於比較。

if (coordinate.latitude > -90 && coordinate.latitude < 90) 
    [NSException raise:@"Invalid latitude value" 
       format:@"Latitude of %d is invalid", coordinate.latitude]; 

這段代碼的邏輯應該籌集-30.99986一個例外,因爲它是-90和90之間的問題是%d您使用格式化的錯誤信息,認爲它的參數作爲int並給你奇怪的結果。

+0

非常感謝+1接受了其他,但你也是對的。真誠地欣賞你的時間。 –

0

在這種情況下,您不需要緯度/檢查長明確,因爲MapKit有這樣對你的方法。請嘗試以下操作:

if (!CLLocationCoordinate2DIsValid(coordinate)) { 

    [NSException raise:@"Invalid coordinate values" format:@"Latitude: %f Longitude: %f", coordinate.latitude, coordinate.longitude]; 
}