我正在从本地文件中解析一些天气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
为什么会发生这种情况的任何想法?
答案 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会对你更好。