前几天项目中遇到一个商品价格丢失精度的问题。
服务端返回的价格是number类型;
我用上面的方式,将接受到的二进制数据responseObject转成json发现价格是80.0400000000001;但是安卓同事说他接收到的数据就是80.04。然后我就怀疑是转json的时候,丢失的精度。
索性直接把二进制ut8编码成字符串,发现价格确实是80.04。然后开始查json序列化的时候出现了什么问题。最后也没找到json序列化中间的解决办法,看网上说服务端穿float数据,最好用字符串,number的话就会丢失精度。
最后的处理方式是:
[NSString stringWithFormat:@"%.2f" , [price floatValue]];
通过stringWithFormat:方法保留小数点后两位,这种方式会对小数点后第三位开始四舍五入。
来源:CSDN
作者:qq_32940999
链接:https://blog.csdn.net/qq_32940999/article/details/104536006