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

来源:互联网 发布:mac炒股软件 知乎 编辑:程序博客网 时间:2024/06/10 11:33

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 =     (                {            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

所以处理服务器返回的浮点数数据时,需要设置小数点位数。

价格数据处理,建议服务器统一使用分作为单位,传整形价格数据过来,客户端统一%100转元处理。

0 0
原创粉丝点击