原文 http://blog.sina.com.cn/s/blog_92aba1430102wakk.html
开发中处理处理数字、价格金额等问题时, 后台经常返回float类型, 打印或转成NSString都会有精度丢失问题,因此使用系统自带的NSDecimalNumber
做处理, 能解决这问题:
经过测试其实系统
NSDecimalNumber
是对有问题值做了
四舍五入
处理处理精度有关的数据请用
double
下面是后台请求拿到的数据:
{
"cal_date" = "2016-08-04";
fee = 0;
"fund_code" = 020007;
"min_subscript" = 100;
nav = "2.654";
"purchase_status" = 1;
"rate_growth" = "0.7665999999999999"; //此处数据有问题,后台给的是0.7666
"redemp_status" = 1;
risklevel = 0;
},
方法处理 :
float testDouble = [listModel.rate_growth floatValue]; NSString *doubleString = [NSString stringWithFormat:@"%lf", testDouble]; NSDecimalNumber *decNumber = [NSDecimalNumber decimalNumberWithString:doubleString]; NSLog(@"%@", [decNumber stringValue]); 打印结果: 0.7666 数据显示先后对比:
强烈建议 :
有关浮点型数据,后台传字符串的格式,防止丢失精!