美文网首页iOS开发笔记本
【iOS】double转String出现精度异常

【iOS】double转String出现精度异常

作者: zhangPeng丶 | 来源:发表于2017-09-08 13:20 被阅读105次

    简书http://www.jianshu.com/u/5690b3ad0a6f
    Bloghttp://blog.zhangpeng.site
    GitHubhttps://github.com/fullstack-zhangpeng

    double转String出现精度异常

    在日常开发中,后台再给我们返回数字类型的数据时,很有可能是带小数点的。我们只能用float或者double去接,我们如果需要显示给用户时,就会造成精度异常。

    错误:

    {
        "double": 79.04,
    }
    

    后台给我们返回上面的json,我们将它转为字典

    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    
    [NSString stringWithFormat:@"转换错误的结果为%@", dic[@"double"]];
    
    image

    也许有人会说在转字符串时,加上保留的位数就可以了。

    • 这是大错特错的方法,因为我们不知道后台会给我们返回什么数据,所以我们不知道该保留几位小数。
    • 同样我们也不能采取切割字符串的方式。

    解决办法

    采用苹果提供的NSDecimalNumber解决此问题

    double d = [dic[@"double"] doubleValue];
    NSString *dStr = [NSString stringWithFormat:@"%f", d];
    NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithString:dStr];
        
    [NSString stringWithFormat:@"转换成功的结果为%@", dn.stringValue];
        
    
    image

    详见Demo的VC1 Demo

    相关文章

      网友评论

      • 小怪之屋:直接使用 NSNumber 就可以转换过来
        [NSString stringWithFormat:@"%@",[NSNumber numberWithDouble:num]]

      本文标题:【iOS】double转String出现精度异常

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