7

我有一个 XML 文件中的经度和纬度列表。我可以将 lat 和 lon 打印为字符串,但是当我将字符串转换为双精度时,我得到 0。

这是我的代码:

NSString *latstring = [[NSString alloc] initWithString:theList.lat] ;
NSString *lonstring = [[NSString alloc] initWithString:theList.lon];
NSLog(@"latstring: %@, lonstring: %@", latstring, lonstring);

double latdouble = [latstring doubleValue];
double londouble = [lonstring doubleValue];
NSLog(@"latdouble: %g, londouble: %g", latdouble, londouble);

当我记录'latstring'和'lonstring'时,我得到正确的坐标但是当我记录'latdouble'和'londouble'时,我得到0。

我需要将 lat 和 lon 值作为双精度值,这样我就可以在地图视图中使用它们,因为它不允许我使用字符串作为坐标。

对此可能有一个非常简单的解释,但是我对objective-c相当陌生,似乎无法找到解决方案。

任何帮助深表感谢。

4

2 回答 2

16

解决了这个问题。像菲利普所说的那样计算字符串的长度后,结果发现长度比字符串长 1 个字符。所以我在中间添加了另一个字符串,它与'latstring'和'lonstring'相同,但是它从索引1而不是0开始,因此切断了必须在坐标值前面的任何字符。然后这完美地转换为双倍。

这是使用的代码:

NSString *latstring = theList.lat;
NSString *lonstring = theList.lon;
NSLog(@"%@, %@ wooo", latstring, lonstring);

NSString *latcutstring = [latstring substringFromIndex:1];
NSLog(@"cut lat: %@", latcutstring);
NSString *loncutstring = [lonstring substringFromIndex:1];
NSLog(@"cut lon: %@", loncutstring);

double latdouble = [latcutstring doubleValue];
NSLog(@"latdouble: %f", latdouble);
double londouble = [loncutstring doubleValue];
NSLog(@"londouble: %f", londouble);

谢谢 Phillip Mills 和 Tobol 的帮助。

编辑:2012 年 11 月

正如克雷格和菲利普所说,这是空白导致的问题,我找到了一种更安全的方法来避免删除所需的字符。

NSString *trimlat = [theList.lat stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSString *trimlon = [theList.lon stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    //Convert to double
    double latdouble = [trimlat doubleValue];
    double londouble = [trimlon doubleValue];

    //Create coordinate
    CLLocationCoordinate2D coord = {(latdouble),(londouble)};
于 2012-07-25T18:49:02.587 回答
1

我认为这些字符串不是很好的格式化程序。数字前只能有空格。lat 和 lon 的格式必须像 'dd.dddddddd'。

    NSString *works = @"  12.5431 jdty";
    NSString *doesntWorks = @"E 43.4345";
    NSString *latstring = [[NSString alloc] initWithString:works] ;
    NSString *lonstring = [[NSString alloc] initWithString:doesntWorks];
    NSLog(@"latstring: %@, lonstring: %@", latstring, lonstring);

    double latdouble = [latstring doubleValue];
    double londouble = [lonstring doubleValue];
    NSLog(@"latdouble: %g, londouble: %g", latdouble, londouble);
于 2012-07-25T11:05:58.953 回答