开发中遇到Json解析后数据中涉及数字的会存在部分失去了原有精度。因为后台返回的数据不是字符串类型NSString,而是double或者float,打印或者转成NSString时就会出现精度丢失,因此我们需要对这些数据进行处理。
| 原始数据 | 打印数据 |
|---|---|
| 90.49 | 90.48999999999999 |
| 90.99 | 90.98999999999999 |
| 99.79 | 99.79000000000001 |
| 99.99 | 99.98999999999999 |
| 9012.19 | 9012.190000000001 |

处理前数据
处理方法
这里我们要用到系统自带的NSDecimalNumber来对数据进行处理,这里我们采用接收NSString的方式
/**
修正数据精度丢失
@param original 传入接口取到的数据
@return 修正精度后的数据
**/
+(NSString *)getReviseNumberData:(NSString *)original{
double originalValue = [original doubleValue];
NSString *revisetring = [NSString stringWithFormat:@"%lf", originalValue];
NSDecimalNumber *result = [NSDecimalNumber decimalNumberWithString:revisetring];
return [result stringValue];
}
注意:处理精度相关问题是用double

处理后数据
有关数据精度丢失问题,建议和后台商议规定以字符串的格式来进行传输,防止丢失精度