将 NS 流量转换为浮点型 - 目标 C



我想将字符串转换为浮点数,这是我写的代码:

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 样式打印。

最新更新