我想将字符串转换为浮点数,这是我写的代码:
NSString *latString = [[response valueForKey:@"coords"] valueForKey:@"lat"];
NSLog(@"Latitude String: %@", latString);
self.coordLat = [latString floatValue];
NSLog(@"Latitude: %lu", (unsigned long) self.coordLat);
但这是我得到的:
2016-03-14 17:36:00.471 marsad[9968:186761] Latitude String: 36.860532
2016-03-14 17:36:00.587 marsad[9852:152630] Latitude: 36
unsigned long
类型就像integers
所以自然地小数点被截断。
请尝试NSLog(@"Latitude: %f", self.coordLat);
。
只读属性NSString
floatValue
如 Apple 文档中所述:
此属性在字符串的开头不包含空格。此属性在溢出时为 HUGE_VAL 或 –HUGE_VAL,在下溢时为 0.0。如果字符串不以浮点数的有效文本表示形式开头,则此属性为 0.0。
如果字符串格式正确,则可以简单地将其转换为浮点数:
NSString *val = @"3.45";
float fCost = [val floatValue];
NSLog(@"Latitude: %lu", (unsigned long) self.coordLat);
这会将值转换为长整型。你应该使用类似的东西:
NSLog(@"Latitude: %f", self.coordLat);
NSLog(@"Latitude: %g", self.coordLat);
64 位浮点数(双精度),如果指数小于 –4 或大于或等于精度,则以 %e 样式打印,否则以 %f 样式打印。