我正在向一个方法传递一个浮点数,但它没有显示所有小数。我不知道为什么会这样。
以下是一个例子:
[[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 :(得分:1)
更改格式字符串中的%f
以指定所需的小数位数,例如%.16f
。
请注意,显示的小数位数并不能保证它们正确,但至少它们不会被截断。
总的来说问题是浮点数不包含有关精度的信息,并且不能精确地表示一些十进制值,因此格式化不能在一般情况下“自动检测”小数位数。因此,您只需要通过指定所需的数字来覆盖默认值,并接受它不代表位置准确性。但是,由于您似乎通过URL将浮动数传递给另一个程序,这应该不是问题 - 更多的小数更好。
答案 1 :(得分:0)
看起来CoreLocation使用双精度来表示度数,所以如果在设备上找到更多的地理精度,我会感到惊讶。
但是,一般来说,如果你想表示比double更高的精度,你可以在Objective-C中使用long double
,就像这样......
long double myPi = 3.141592653589793;
NSLog(@"%16.16Lf", myPi);