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數據是碎片化(解析出來不是以字典開頭的),就會解析不出來