转换为float时,JSON字符串变为不同的值

时间:2015-04-01 14:21:12

标签: ios objective-c json string-parsing

我正在从本地文件中解析一些天气JSON。

 "temp_f":40.1,
 "temp_c":4.5,

问题在于我将其解析为c值

NSLog(@"%f", [weatherDict[@"temp_f"]floatValue]);

//Logs: 40.099998

如果我将其记录为字符串值,则返回40.1

NSLog(@"%@", [weatherDict objectForKey:@"temp_f"]);
//Logs: 40.1

问题似乎是在调用floatValue

为什么会发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:1)

这与浮点精度有关,请改用NSDecimal:

[NSDecimalNumber decimalNumberWithString:weatherDict[@"temp_f"]];

答案 1 :(得分:1)

你在问“为什么”。

完整的答案可以在最着名的文章“每个计算机科学家应该了解浮点运算”中找到:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

除非你想永远猜测为什么奇怪的事情发生在你的号码上,否则必须阅读。

顺便说一句。使用double,而不是float,除非你能给我一个很好的理由为什么float会对你更好。