• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:24:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

使用 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 "

谢谢。



Best Answer-推荐答案


这不是问题。

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 转换为字符串进行输出。 NSNumberFormatter将是一个更好的选择或使用一些 printf 解决方案,如上一个答案。

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap