0

我将浮点数传递给一个方法,但它没有显示所有小数。我不知道为什么会这样。

这是一个例子:

[[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&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.

请注意,显示的小数位数并不能保证它们是正确的,但至少它们不会被截断。

总体而言,问题在于浮点数不包含有关精度的信息,并且不能精确地表示某些十进制值,因此在一般情况下格式化不能“自动检测”小数位数。因此,您只需要通过指定所需的数字来覆盖默认值,并接受它不代表位置准确性。但由于您似乎是通过 URL 将浮点数传递给另一个程序,这应该不是问题——小数位数越多越好。

于 2012-10-31T15:21:42.613 回答
0

看起来 CoreLocation 使用双精度来表示度数,所以如果在设备上可以找到更多的地理精度,我会感到惊讶。

但是,一般来说,如果你想表示比双精度更高的精度,你可以long double像这样在 Objective-C 中使用......

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