开发中遇到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

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