iOS 关于网络数据解析小数位精度丢失问题的修正

近日,项目中出现了部分后台返回数据,特别是价格时,小数位会出现很多00001的现象,

iOS 关于网络数据解析小数位精度丢失问题的修正_第1张图片
Xcode上读取数据

而在谷歌浏览器测试后台返回数据时,正常显示是只有2位,后台也说只返给了2位小数给我,

iOS 关于网络数据解析小数位精度丢失问题的修正_第2张图片
谷歌浏览器上读取数据

百思不得其解,只能认为是开发环境不同造成的问题。首先想到的解决方案是利用 %.2f 进行截取四舍五入,其实可以正常使用,只是保留了两位小数。后来网上查阅得知其实是,NSNumber的description方法不够严谨,在调用NSNumber的description方法打印数值时,会发生精度损失。如果是double类型,建议把NSNumber转换成double再进行输出或计算。

解决方法:在后台返回float或者double类型时,利用NSDecimalNumber处理精度丢失问题。此处我是以string方式接收的,直接添加NSString的分类,修正方法如下:

+(NSString *)reviseString: (NSString *)str

{

//直接传入精度丢失有问题的Double类型

double conversionValue = [str doubleValue];

NSString *doubleString = [NSString stringWithFormat:@"%lf", conversionValue];

NSDecimalNumber *decNumber = [NSDecimalNumber decimalNumberWithString:doubleString];

return [decNumber stringValue];

}

你可能感兴趣的:(iOS 关于网络数据解析小数位精度丢失问题的修正)