美文网首页iOS开发资料收集区
iOS:浮点型数字json解析之后出现精度差的问题

iOS:浮点型数字json解析之后出现精度差的问题

作者: money_ac9e | 来源:发表于2018-09-03 17:32 被阅读66次

1.声明一个字符串,里面保存一个number类型的数字

    NSString *jsonString = @"{\"number\":89.6}";

2.转化为json发生了神奇的事情 精确度竟然变了

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:muDic options:kNilOptions error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"jsonString is %@",jsonString);
2018-09-03 17:24:02.721083+0800 test[41842:2495113] jsonString is {"number":89.599999999999994}

3.我们解析得到值,展示在界面上

NSData *jsonData2 = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
id dic = [NSJSONSerialization JSONObjectWithData:jsonData2 options:NSJSONReadingMutableContainers error:&err];
if(err) {
    NSLog(@"json解析失败:%@",err);
}else{
   NSLog(@"dic is %@",dic);
}
2018-09-03 17:24:02.721247+0800 test[41842:2495113] dic is {
    number = "89.59999999999999";
}

4.这个服务器返回的是正确的,而app转化的时候变化了
可我们得到这个数字之后要怎么展示呢?
可以转化为浮点类型的数字

    NSString *number = [dic objectForKey:@"number"];
    NSString *result = [NSString stringWithFormat:@"%f",number.doubleValue];
    NSLog(@"result is %@",result);
   2018-09-03 17:24:02.721354+0800 test[41842:2495113] result is 89.600000

这个时候有新的问题了:后面有很多0怎么办

    NSString *result2 = [NSString stringWithFormat:@"%g",number.doubleValue];
    NSLog(@"result2 is %@",result2);
2018-09-03 17:24:02.721449+0800 test[41842:2495113] result2 is 89.6

至此完美的解决了问题

5.备注:2018-10-29 发现整形时数据会出现问题,这里需要判断一下

- (NSString *)getnumber:(id)numberId
{
    NSString *str = [NSString stringWithFormat:@"%@",numberId];
    if([str rangeOfString:@"."].length>0)
        
    {
        return [NSString stringWithFormat:@"%g",str.floatValue];
    }else
        
    {
        return str;
    }
}

相关文章

网友评论

本文标题:iOS:浮点型数字json解析之后出现精度差的问题

本文链接:https://www.haomeiwen.com/subject/lmxrwftx.html