iOS|iOS 处理服务器返回的浮点数数据

iOS开发遇到的一个问题:
对服务器返回的价格数据,直接转为字符串保存展示,服务器转过来的价格 如9.89,保存为字符串之后 变为了9.890000000000001。
处理过程为:
服务器返回的json 数据 为 responseString = {“code”:200000,”msg”:”ok”,”data”:[{“id”:34,”name”:”补胎”,”serviceParts”:[],”timeFeePrice”:9.89,”timeFeeOriginalPrice”:50.0}]}
我们看到json 数据里面 浮点数据 timeFeePrice = 9.89
responseObject = [NSJSONSerialization JSONObjectWithData:data options:self.readingOptions error:&serializationError];
经过系统json 转化为 NSDictionary* responseObject 后,打印responseObject 为

code = 200000; data =https://www.it610.com/article/( { id = 34; name ="\U8865\U80ce"; serviceParts =( ); timeFeeOriginalPrice = 50; timeFeePrice = "9.890000000000001"; } ); msg = ok;

我们看到打印出来的 timeFeePrice = “9.890000000000001”;
因为 十进制数字“9.89”不能完全代表一个二进制浮点数等float或double。所以“舍入浮9.89”没有意义,因为没有完全等于9.89浮动。
你只能指定一个精度将浮点数转换为十进制输出字符串。您可以使用一个NSNumberFormatter或printf-format像”%.f
所以处理服务器返回的浮点数数据时,需要设置小数点位数。
【iOS|iOS 处理服务器返回的浮点数数据】价格数据处理,建议服务器统一使用分作为单位,传整形价格数据过来,客户端统一%100转元处理。

    推荐阅读