2

使用 解析后,浮点值会发生变化JSONKit。调用objectFromJSONString或后出现问题mutableObjectFromJSONString

在触发此方法之前,JSON 响应很好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 "

谢谢。

4

2 回答 2

4

这不是问题。

该值1002.65不能使用 IEEE 754 浮点数精确表示使用printf格式转换说明符 %.17g 将浮点数转换为十进制表示。

文档

C double 基元类型,或 IEEE 754 Double 64 位浮点,用于表示浮点 JSON 数字值。JSON 包含不能表示为双精度的浮点数值(即,由于上溢或下溢)将无法解析并可选择返回 NSError 对象。函数 strtod() 用于执行转换。请注意,JSON 标准不允许无穷大或 NaN(非数字)。浮点值的转换和操作并非易事。不幸的是,RFC 4627 没有说明如何处理这些细节。您不应该依赖或期望当浮点值被往返时,它将具有相同的文本表示,甚至比较相等。即使将 JSONKit 用作 JSON 的解析器和创建者也是如此,

来源:请参阅此线程https://github.com/johnezang/JSONKit/issues/110

解决方案:您可以指定精度,同时将浮点数转换为字符串以进行输出。NSNumberFormatter将是一个更好的选择,或者使用一些 printf 解决方案,如上一个答案。

于 2013-04-22T11:42:40.427 回答
0

使用浮点定点表示,例如,

 NSLog(@"value = %.2f",floatvalue); 

现在它将显示 value = 1002.65

于 2013-04-22T11:36:31.677 回答