gpt4 book ai didi

iphone - JSONKit 在从 iPhone 中的 Web 服务解码 JSON 对象时更改浮点值

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:46:58 27 4
gpt4 key购买 nike

在使用 JSONKit 解析后,浮点值发生了变化。问题发生在调用 objectFromJSONStringmutableObjectFromJSONString 之后。

JSONKit.m 中触发此方法之前,JSON 响应正常:

static id _NSStringObjectFromJSONString(NSString *jsonString, JKParseOptionFlags parseOptionFlags, NSError **error, BOOL mutableCollection)

原始回复:

"value":"1002.65"

调用objectFromJSONString后的响应:

"value":"1002.6500000001" or sometimes "value":"1002.649999999 "

谢谢。

最佳答案

这不是问题。

1002.65 无法使用 IEEE 754 float 精确表示。使用 printf 将 float 转换为其十进制表示形式格式转换说明符 %.17g。

来自Docs :

The C double primitive type, or IEEE 754 Double 64-bit floating-point, is used to represent floating-point JSON Number values. JSON that contains floating-point Number values that can not be represented as a double (i.e., due to over or underflow) will fail to parse and optionally return a NSError object. The function strtod() is used to perform the conversion. Note that the JSON standard does not allow for infinities or NaN (Not a Number). The conversion and manipulation of floating-point values is non-trivial. Unfortunately, RFC 4627 is silent on how such details should be handled. You should not depend on or expect that when a floating-point value is round tripped that it will have the same textual representation or even compare equal. This is true even when JSONKit is used as both the parser and creator of the JSON, let alone when transferring JSON between different systems and implementations.

来源:查看此线程 https://github.com/johnezang/JSONKit/issues/110

解决方法:可以指定一个精度,同时把float转成string输出。 NSNumberFormatter将是一个更好的选择或使用一些 printf 解决方案,如上一个答案。

关于iphone - JSONKit 在从 iPhone 中的 Web 服务解码 JSON 对象时更改浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16146081/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com