2012-10-31 41 views
0

我將一個float傳遞給方法,但它不顯示所有小數。我不知道爲什麼會發生這種情況。Objective C float不顯示所有小數

下面是一個例子:

[[LocationApiCliente sharedInstance] nearPlacesUsingLatitude:-58.3645248331830402 andLongitude:-34.6030467894227982]; 

然後:

- (BOOL)nearPlacesUsingLatitude:(double)latitude andLongitude:(double) longitude { 



    NSString *urlWithCoords = [NSString stringWithFormat:@"%@&lat=%f&long=%f", CountriesPath, latitude, longitude]; 

印刷urlWithCoords將導致:

格式= JSON & LAT = -58.364525 &長= -34.603047

更多內容。我從輸出終端得到:

(lldb) p -3.13419834918349f 
(float) $4 = -3.1342 
(lldb) p -3.13419834918349 
(double) $5 = -3.1342 

任何想法?

回答

0

它看起來像CoreLocation使用雙打來表示度數,所以如果在設備上還有更多的地理精度,我會感到驚訝。

但是,在一般情況下,如果你想表示一倍以上更高的精度,可以在這樣的Objective-C使用long double ...

long double myPi = 3.141592653589793; 
NSLog(@"%16.16Lf", myPi); 
1

更改%f在你格式化字符串指定期望的小數位數,例如%.16f

請注意,顯示的小數位數不能保證它們是正確的,但至少它們不會被截斷。

總的來說問題是浮點數不包含關於精度的信息,也不能精確地表示一些十進制值,所以格式化不能在一般情況下「自動檢測」小數位數。所以你只需要通過指定所需的數字來覆蓋默認值,並接受它不代表位置精度。但是由於你似乎正在通過URL將浮點數傳遞給另一個程序,所以這不應該成爲一個問題 - 小數越多越好。