iOS - Json解析精度丢失处理(NSString, Double, Float)

开发中处理处理价格金额问题, 后台经常返回float类型, 打印或转成NSString都会有精度丢失问题, 因此使用系统自带的NSDecimalNumber做处理, 能解决这问题:

经过测试其实系统NSDecimalNumber是对有问题值做了四舍五入处理

  • 还有经过测试, 重要的事说三遍:
    处理精度有关的数据请用double
    处理精度有关的数据请用double
    处理精度有关的数据请用double
    float testDouble = [jsonDict[@"Body"][@"Amount"] floatValue]; //有问题 90.989999999999994
    NSString *convertString = decimalNumberWithString([jsonDict[@"Body"][@"Amount"] stringValue]);
    NSLog(@"%@", convertString);
       testDouble的值     原始值& NSDecimalNumber处理后打印后的值
//    99.489999999999994 99.49
//    99.989999999999994 99.99
//    90                 90.00
//    90.090000000000003 90.09
//    90.189999999999998 90.19
//    90.290000000000006 90.29
//    90.39              90.39
//    90.489999999999994 90.49
//    90.590000000000003 90.59
//    90.689999999999998 90.69
//    90.790000000000006 90.79
//    90.89              90.89
//    90.989999999999994 90.99

对此自己写了个方法处理 :

/** 直接传入精度丢失有问题的Double类型*/
NSString *decimalNumberWithDouble(double conversionValue){
    NSString *doubleString        = [NSString stringWithFormat:@"%lf", conversionValue];
    NSDecimalNumber *decNumber    = [NSDecimalNumber decimalNumberWithString:doubleString];
    return [decNumber stringValue];
}

强烈建议 :

   有关浮点型数据,后台传字符串的格式,防止丢失精度。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前几天在IOS开发时发现一个JSON解析奇葩问题,会出现一定概率的错误,如下: 初步怀疑是系统API内部处理问题。...
    奋斗的蜗牛阅读 6,185评论 1 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,179评论 19 139
  • 前言 在日常的开发中我们随时都会跟数字打着交道,对数字的处理也是很平常的事,本文仅对常用的数字操作一个小结,当一个...
    進无尽阅读 4,991评论 0 2
  • 建立一个平台,挑选一些有意思的议题进行发表,建立一个圈子,给对此感兴趣的人提供一个交流的平台和渠道
    久也行阅读 1,175评论 0 0
  • 这天气真叫闷骚,室内热室外冷。下班时雨下得不算大,只是阴沉着天,如同刚挨骂的科长,摆着一张臭脸,仿佛单位里谁都欠他...
    木头奶奶阅读 3,916评论 8 23

友情链接更多精彩内容