NSJSONSerialization精度丢失问题
- 当我们服务器传一个数据3.0(浮点数)Android那边也是3.0,iOS这边却是是2.99999
// 模拟服务器传递过来的JSON数据
NSString *jsonStr = @"{\"71.40\":71.40, \"97.40\":97.40, \"80.40\":80.40, \"188.40\":188.40}";
NSData *JSONData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[NSJSONSerialization JSONObjectWithData:JSONData options:0 error:nil]];
NSLog(@"%@",dict);
/**
"188.40" = "188.4";
"71.40" = "71.40000000000001";
"80.40" = "80.40000000000001";
"97.40" = "97.40000000000001";
*/
- 解决方案:
1、协商服务端转化为字符串类型
2、第三方的JSON(AFNetwork)
服务器传递过来是float类型,但是苹果默认是双精度double类型,就会造成导致精度丢失
AFN JSON解析失败
当服务器返回JOSN数据,Android端解析没问题,iOS端解析出错
解决方案:修改AFN源码
- (instancetype)serializer {
return [self serializerWithReadingOptions:(NSJSONReadingOptions)0|NSJSONReadingAllowFragments];
}
AFN默认解析方式是
NSJSONReadingMutableContainers
,如果json数据是碎片化(解析出来不是以字典开头的),就会解析不出来