使用JSONKit
解析后,浮点值会发生变化。调用objectFromJSONString
或mutableObjectFromJSONString
后会出现此问题。
在JSONKit.m
:
static id _NSStringObjectFromJSONString(NSString *jsonString, JKParseOptionFlags parseOptionFlags, NSError **error, BOOL mutableCollection)
原始回复:
"value":"1002.65"
致电objectFromJSONString
后的回复:
"value":"1002.6500000001" or sometimes "value":"1002.649999999 "
感谢。
答案 0 :(得分:4)
这不是问题。
使用IEEE 754浮点数无法准确表示值1002.65
。
使用printf格式转换说明符%。17g将浮点数转换为十进制表示形式。
来自Docs:
C double基本类型,或IEEE 754 Double 64位浮点, 用于表示浮点JSON数值。 JSON那个 包含不能表示为的浮点数值 double(即由于over或underflow)将无法解析和 可选地返回NSError对象。函数strtod()用于 执行转换。请注意,JSON标准不允许 无穷大或NaN(非数字)。转换和操纵 浮点值非常重要。不幸的是,RFC 4627是 没有说明应该如何处理这些细节。你不应该依赖 或者期望当一个浮点值往返时它 会有相同的文字表示,甚至比较平等。这个 即使JSONKit同时用作解析器和创建者,也是如此 JSON,更不用说在不同系统之间传输JSON了 和实现。
来源:请参阅此帖子https://github.com/johnezang/JSONKit/issues/110
解决方案:您可以指定精度,同时将float转换为字符串以进行输出。 NSNumberFormatter将是一个更好的选择或使用一些printf解决方案,如上一个答案。
答案 1 :(得分:0)
使用浮动定点表示,如
NSLog(@"value = %.2f",floatvalue);
现在它将显示值= 1002.65