0

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 を印刷すると、次のようになります。

format=json&lat=-58.364525&long=-34.603047

これ以上。出力端子から得ているもの:

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

何か案は?

4

2 に答える 2

1

%fフォーマット文字列の s を変更して、目的の小数点以下の桁数を指定します (例: %.16f.

表示されている小数点以下の桁数が正しいことを保証するものではありませんが、少なくとも切り捨てられることはありません。

全体的な問題は、浮動小数点数には精度に関する情報が含まれておらず、一部の 10 進数値を正確に表すことができないため、一般的なケースでは書式設定で 10 進数を「自動検出」できないことです。したがって、目的の数値を指定してデフォルトをオーバーライドし、それが位置精度を表すものではないことを受け入れる必要があります。しかし、浮動小数点数を URL 経由で別のプログラムに渡しているように見えるので、これは問題にはなりません。小数点以下の桁数が大きいほどよいのです。

于 2012-10-31T15:21:42.613 に答える
0

CoreLocationは度を表すためにdoubleを使用しているように見えるので、デバイスに地理的な精度がさらにあるとしたら、私は驚きます。

しかし、一般的に、doubleよりも高い精度を表現したい場合はlong double、Objective-Cで次のように使用できます...

long double myPi = 3.141592653589793;
NSLog(@"%16.16Lf", myPi);
于 2012-10-31T15:14:08.353 に答える