ich bin Parsen eine Zeichenfolge, die wie folgt aussieht:Parsen eine Zeichenfolge, die eine Zahl zu erhalten und immer unterschiedliche Ergebnisse
POINT(-96.795894101604 46.911266990766)
wenn ich die 2 Zahlen aus analysieren, i unterschiedliche Werte erhalten, basierend auf, wenn ich ein verwenden Doppel- oder [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);
}
Ergebnisse sind:
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
warum bekomme ich einen genaueren Wert wh de den NSString/NSNumber Weg dann mit einem 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);
Beachten Sie, dass in der Tat, Sie den Wert tempLat
und tempLon
von latitude
bekommen und longitude
so können sie nicht, als sie genauer sein:
Ein Doppel ist nicht präzise. Verwenden Sie die Dezimalzahl, wenn Sie genaue Gleitkommawerte benötigen. Edit: sorry ich dachte das wäre C# :) Vielleicht gilt das selbe auch hier. – Silvermind
Ich sehe nicht, dass Sie unterschiedliche Ergebnisse erhalten. Im ersten Fall erhalten Sie nur die standardmäßige 6.4-Formatierungspräzision. Ändern Sie die Formatierungspräzision und die Zahlen sind viel ähnlicher (wenn nicht identisch). –