gpt4 book ai didi

objective-c - 解析一个字符串得到一个数字并得到不同的结果

转载 作者:行者123 更新时间:2023-11-28 20:37:30 24 4
gpt4 key购买 nike

我正在解析一个看起来像这样的字符串:

POINT(-96.795894101604 46.911266990766)

当我解析出这两个数字时,我会根据我使用的是 double 还是 [NSNumber numberWithDouble:] 得到不同的值

-(void)parseGPSValue:(NSMutableString *)GPSString
{
NSRange prefixMatch = [GPSString rangeOfString:@"("];
NSRange midMatch = [GPSString rangeOfString:@" "];
NSRange sufixMatch = [GPSString rangeOfString:@")"];

//parses the GPS coords; NSMakeRange takes starting location and range
double latitude = [[GPSString substringWithRange:NSMakeRange((prefixMatch.location + 1), ((midMatch.location - 0) - (prefixMatch.location + 1)))] doubleValue];
double longitude = [[GPSString substringWithRange:NSMakeRange(midMatch.location + 1, (sufixMatch.location) - (midMatch.location + 1))] doubleValue];

NSString *temp1 = [GPSString substringWithRange:NSMakeRange((prefixMatch.location + 1), ((midMatch.location - 0) - (prefixMatch.location + 1)))];
NSString *temp2 = [GPSString substringWithRange:NSMakeRange(midMatch.location + 1, (sufixMatch.location) - (midMatch.location + 1))];

NSNumber *tempLat = [NSNumber numberWithDouble:[temp1 doubleValue]];
NSNumber *tempLong = [NSNumber numberWithDouble:[temp2 doubleValue]];

NSLog(@"GPSString: %@", GPSString);

NSLog(@"latitude: %g| longitude: %g|", latitude, longitude);
NSLog(@"NSNumber lat: %@, NSNumberLong: %@", tempLat, tempLong);
}

结果是:

2012-03-26 10:33:10.166 GPSString: POINT(-96.795894101604 46.911266990766)
2012-03-26 10:33:10.167 latitude: -96.7959| longitude: 46.9113|
2012-03-26 10:33:10.168 NSNumber lat: -96.79589410160401, NSNumberLong: 46.911266990766

为什么我在使用 NSString/NSNumber 方式然后使用 double 时得到更精确的值?

最佳答案

首先,您可以将代码简化为:

double latitude = [temp1 doubleValue];
double longitude = [temp2 doubleValue];

NSNumber *tempLat = [NSNumber numberWithDouble:latitude]; // Can't be more precise than latitude
NSNumber *tempLong = [NSNumber numberWithDouble:longitude]; // Can't be more precise than longitude

NSLog(@"latitude: %g| longitude: %g|", latitude, longitude);
NSLog(@"NSNumber lat: %@, NSNumberLong: %@", tempLat, tempLong);

请注意,实际上,您从 latitudelongitude 中获取了 tempLattempLon 的值,因此它们没有比他们更精确的了。

唯一的问题是您使用 %g 格式打印 latitudelongitude 的值。尝试另一种格式精度,您会看到更多的小数:

NSLog(@"latitude: %.12f| longitude: %.12f|", latitude, longitude);
// latitude: -96.795894101604| longitude: 46.911266990766|

关于objective-c - 解析一个字符串得到一个数字并得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9875177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com