NSDecimalNumber 和大型无符号 long long(64 位)整数

2024-01-03

我正在处理来自 JSON 源的大型 64 位无符号整数,这些整数被解析为 NSDecimalNumbers,这显然是“忠实地表示任意精度数字”。

我遇到的问题是我无法从这门课中得到正确的数字。例如(使用可能的最大值):

print (unsigned long long) [[NSDecimalNumber decimalNumberWithString:@"18446744073709551615"] unsignedLongLongValue]
= 0 // Incorrect
print (unsigned long long) [[NSDecimalNumber decimalNumberWithString:@"9223372036854775808"] unsignedLongLongValue]
= 9223372036854775808 // Correct
print (unsigned long long) [[NSDecimalNumber decimalNumberWithString:@"9223372036854775810"] unsignedLongLongValue]
= 9223372036854775808 // Incorrect

看来我无法从 NSDecimalNumber 中获取大于最大有符号 long long 值的任何值。它不喜欢大于 9223372036854775808 的值。但是,该数字似乎以全精度存储在 NSDecimalNumber 中,如下所示:

po [[NSDecimalNumber decimalNumberWithString:@"18446744073709551615"] stringValue]
= 18446744073709551615

我注意到 NSNumber 对象可以很好地处理这些大数字,并且 unsignedLongLongValue 可以正常工作。这只是 NSDecimalNumbers (我一直坚持使用)不起作用。

如何从 NSDecimalNumbers 中获取正确的 unsigned long long 值?或者至少将它们转换为 NSNumber 对象,其中 unsignedLongLongValue 可以工作。


我通过开发者论坛收到了 Apple 关于此问题的回复:

这是 NSDecimalNumber 的一个长期问题,其中简单的 访问器(例如 [unsigned]longLongValue)通过 doubleValue 访问器 – 这是任何需要超过 53 位精度的值 将被不恰当地舍入。请随时报告有关此的错误 问题并提及错误号 8220543。

也就是说,如果你只是 从 JSON 获取 64 位数字,您应该能够使用 NSNumber 而不是 NSDecimalNumber。

因此,我通过将解析器从 SBJson 更改为 JSONKit 来解决这个问题,这不仅更快,而且还将数字映射到 NSNumber 对象而不是 NSDecimalNumber 对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSDecimalNumber 和大型无符号 long long(64 位)整数 的相关文章

  • 在 Objective C 中使用 NSMutableArray 对象的指针

    当在 cocoa touch 中从 NSMutableArray 检索对象时 下面的代码可以吗 我应该每次分配 alloc 新的 Page 对象还是只是指向它 我是否需要对 Page pageObj 之后执行任何操作 例如将其设置为 nil
  • RestKit:BOOL 值

    我有一个NS ENUM保存清单的状态 这两个属性是Pending and Completed typedef NS ENUM NSUInteger ChecklistStatus Pending Completed 我正在尝试获取状态并将其
  • 在屏幕外绘制 uiview

    我想创建一个 UIView 它在调用 ViewDidLoad 时位于屏幕外 但一旦调用某个函数 我就会将其动画显示到屏幕上 用于对 UIView 进行动画处理的代码很好 但我似乎无法从屏幕外绘制 UIView 我已将故事板中的 UIView
  • 拖动调整 NSView(或其他对象)的大小

    我正在尝试构建一个应用程序 允许用户使用可以调整大小的矩形边界框来指定图像的多个区域 到目前为止 我已经有一个NSScrollView其中包含一个NSImageView这样用户就可以放大图像并根据需要滚动 我目前的想法是我可以使用NSVie
  • 如何在 iOS 中将 NSData 变量转换为 NSInteger 变量

    我有以下返回的 api 方法NSData 我在另一个视图控制器中调用了这个方法 如何转换NSData to NS整数 NSData getBusXMLAtStop NSString stopnumber NSMutableURLReques
  • 在 Xcode 4.2 中启用崩溃日志符号

    我使用的是 Xcode 4 2 我的崩溃日志没有被符号化 如何在 Xcode 4 2 中启用此功能 请浏览苹果的文档 http developer apple com library ios technotes tn2151 index h
  • 有 Objective-C Web 框架吗?

    有 Objective C Web 框架吗 我发现的唯一框架是 frothkit 我主要寻找一种在 Objective C 中编写 RESTful json Web 服务的方法 GNUStepWeb http wiki gnustep or
  • Python代码检测OS X El Capitan中的暗模式以更改状态栏菜单图标

    我有目标 C 代码来检测暗模式以更改状态栏 NSDistributedNotificationCenter defaultCenter addObserver self selector selector darkModeChanged n
  • 如何根据给定的 NSDate 生成方便的日期范围?

    我正在 Cocoa 中创建一个报告生成器 我需要生成方便的日期范围 例如 今天 本周 本月 今年 等 有没有好的方法可以做到这一点 到目前为止 这是我的骨架 interface DateRange NSObject NSDate start
  • UIView表面自定义变换/动画(如“水滴效果”)

    实施方式是什么自定义转换 动画 在视图表面 类似于所附图片 not只是视图边界 问题主要在于一般的方法是什么做到这一点 不完全是 水滴效应 但任何例子肯定会受到赞赏 我想 这是层布局 网格 的某种 算法 转换 但不确定以哪种方式 挖掘 它
  • iCloud Drive 内用户选择的文件夹内的垃圾文件

    我的应用程序可在任何用户选择的文件夹内处理用户 txt 文件 创建 更改 删 除 我只是在内部存储书签以访问用户选择的文件夹和文件 现在 在 macOS Catalina 中 当源文件夹位于 iCloud Drive 内时 系统仍然允许我创
  • 辅助功能:ScrollView 自动滚动到点击“TAB”时不可见的视图

    有人可以让我知道当仅使用键盘的用户尝试使用 Tab 键在 ScrollView 中的不同 UI 元素之间导航时如何自动滚动滚动视图吗 当我按 TAB 键时 焦点会转移到滚动视图中存在的不同 UI 元素 但如果可见内容视图中不存在 UI 元素
  • 预填充 UICollectionView 单元重用队列

    问题 我有一个应用程序 只有一个UICollectionView我第一次滚动它时很卡顿 我已将来源范围缩小到正在创建新单元格 2 的事实 使用initWithFrame 因为周围没有可以重复使用的细胞 初始滚动后 重用队列不为空 单元格可以
  • 在 iPhone 上搜索 PDF

    经过两天尝试使用 Quartz 从 PDF 中读取注释后 我成功做到了并且发布我的代码 https stackoverflow com questions 4080373 get pdf hyperlinks on ios with qua
  • 自定义信息窗口上的按钮未接收 ios 中的操作

    我在 iOS 应用程序中使用 Google 地图 并实现了一个自定义信息窗口来显示标记的标题 现在 我在该自定义信息窗口上添加了一个按钮 但我的问题是按钮操作方法没有被调用 自定义信息窗口 h import
  • NSString 对象的最大长度是多少?

    NSString 对象中可以保存的最大字符串大小是多少 这会动态变化吗 我假设 NSString 的硬限制是 NSUIntegerMax 个字符 因为 NSString 的索引和大小相关的方法返回 NSUInteger 由于当前能够运行 i
  • 如何在导航栏上添加 UIView?

    我需要覆盖UINavigationBar with UIView像这儿 除了使用带有按钮返回的自定义 UIView 作为导航栏之外 还有其他方法可以做到这一点吗 您可以将子视图添加到应用程序的基本视图 UIApplication share
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • 将 NSAttributedString 的子字符串替换为另一个 NSAttributedString

    我想替换一个子字符串 例如 replace of an NSAttributedString和另外一个NSAttributedString 我正在寻找一种等效的方法NSString s stringByReplacingOccurrence
  • 将 NSFetchedResultsController 添加到项目后出现问题

    我设置 CoreData 时没有NSFetchedResultsController一切都保存得很好 切换到之后NSFetchedResultsController 我在尝试保存图像时遇到奇怪的错误 这是我用来保存图像的代码 void sa

随机推荐

  • 在 Asp.net Core 1.0 项目的编译时复制文件

    我正在使用 Asp Net Core 1 0 创建 REST Api 我想在编译项目时将项目中未包含的文件复制到输出路径 但我不知道该怎么做 我尝试使用 buildOptions copyToOutput 但没有成功 我无法真正理解此处找到
  • Node.js 的 EJS(与 Express 捆绑)中未包含 link_to 和其他视图助手?

    我已经使用 Express Web 框架和 EJS 模板引擎设置了一个 NodeJS 服务器 当我尝试使用 EJS 时link to在视图内查看助手时 我收到引用错误 这是因为我做错了什么 还是视图助手只是不包括在内 我尝试过以下方法 lt
  • 在 Blazor 中,如何动态更改 HTML 标签?

    假设我的 Blazor 组件中有以下标记 div ChildContent div 我想为父组件提供一种方法来确定将使用哪个标签来代替 div 就像是 lt Tag attributes Attributes data myattr som
  • QMessageBox 阻止 QDialog

    这次我真的不知道如何提出我的问题 我的应用程序以 QDialog 作为主窗口 该应用程序从远程机器获取不同的值 例如温度 湿度等 为了进行开发 我添加了一个包含不同小部件的组框来模拟这些值 我对向用户发出警告和警报有不同的限制 例如 如果温
  • 优雅地关闭 Java 命令行程序的最佳方法

    我对优雅地关闭 Java 命令行程序的不同方法感兴趣 发送终止信号不是一种选择 我可以想到几种不同的方法 打开端口并等待连接 完成后 优雅地关闭 观察要创建的文件 然后关闭 从终端读取一些输入 例如 执行关闭 第三种方法并不理想 因为经常有
  • Chef 食谱中的编译时间与运行时间

    我有以下 简化的 方法 称为 java 当然可以安装 Java 文件菜谱 default rb include recipe install java 文件菜谱 install java rb Install RPM from yum re
  • 在 Qt Creator 中哪里可以将参数传递给编译器?

    在 Qt Creator 中哪里可以将参数传递给编译器 这并不是那么明显 根据您的构建系统 它要么在您的qmake 项目文件 https doc qt io qt 5 qmake variable reference html qmake
  • “内存不足”是可恢复的错误吗?

    我已经编程很长时间了 我看到的程序 当内存不足时 会尝试清理并退出 即优雅地失败 我不记得上次看到有人真正尝试恢复并继续正常运行是什么时候了 如此多的处理依赖于能够成功分配内存 尤其是在垃圾收集语言中 似乎内存不足错误应该被归类为不可恢复的
  • 在 VS.Net 的调试器中正确检查 COM / Interop 类的实例?

    有谁知道是否以及如何在 VisualStudio 的调试器中正确查看 COM Interop 对象 以其正确的类型 我得到的只是 evil 系统 ComObject值 即使它正确标识了类型 E g From NET 和 COM 完整的互操作
  • str_getcsv 示例

    我想将逗号分隔的值字符串解析为数组 我想尝试一下str getcsv php 函数 但我找不到任何关于如何使用它的好例子 例如 我有一个输入 用户可以在其中提交编程语言 php js jquery 等 的标签 就像提交问题时在 stacko
  • 找出最小匹配对

    我有 2 个列表 其中包含具有 3 个属性的相同对象 accNo accType 和余额 List lt gt CSList CS1 CS 3000 CS2 CS 2000 CS3 CS 1000 List lt gt CLList CL1
  • 我可以对 HTML 表单使用 HTML5 下载属性吗?

    HTML5 引入了一个很好的标记功能 a 链接作为下载端点 只需添加download归因于 a tag 见说明 http www w3schools com tags att a download asp 是否可以对 HTML 表单执行相同
  • 使用 RewriteCond %{QUERY_STRING} 而不将查询字符串附加到新地址

    我尝试使用 htaccess 进行 301 重定向 问题 view products id 12345 gt 8831 旧地址和新地址之间没有任何关系 因为某些原因 Redirect 301 view products id 12345 8
  • 用于更新的 MySql UNION

    有没有办法使用单个 SQL 查询更新多行 每行具有不同的值 我必须用不同的数据更新多行中的一列 对每一行使用单独的更新查询似乎过多 因此如果可能的话 我希望将此过程合并到单个 SQL 语句中 或者至少减少所需的查询数量 我将 PHP 与 Z
  • VMware vFabric 服务器超时

    因此 我下载了 Spring Tool Suite 当我想启动 VMware vFabric tc Server 时 我收到以下消息 服务器 VMware vFabric tc Server Developer Edition v2 6 无
  • 支持的平台、基础 SDK、仅构建活动架构设置在 Pod 更新后恢复

    我的团队最近开始使用 CocoaPods 来管理我们的 iOS 应用程序项目中的依赖关系 这是 pod 文件 platform ios 6 0 pod UI7Kit pod AFNetworking gt 2 0 pod TMCache p
  • 有没有办法检查应用程序签名是否已调试或已发布?

    我目前正在开发 RPC 服务供开发人员使用 但想确保我可以区分另一个应用程序的调试密钥及其公钥 有没有办法检查另一个应用程序的密钥并判断它是否是调试密钥而不是已发布的应用程序密钥 这样做的目的是能够判断他们的应用程序何时处于开发或发布状态
  • Racket 中列表到字符串的转换

    如何在 DrRacket 中将列表转换为字符串 例如 如何将 红黄蓝绿 转换为 红黄蓝绿 我尝试使用 list gt string 但这似乎只适用于字符 这里的技巧是映射列表symbols作为输入接收 依次将每个数字转换为字符串 并在除最后
  • 声明大数组时出现 OutOfMemoryException

    我必须创建一个相当大的双数组 12000ish x 55000ish 不幸的是 我遇到了内存不足的异常 我以前用Java开发 可以更改内存设置 这对于 C 来说是可能的还是根本不可能 我用的是VS 2008 Each double是 8 个
  • NSDecimalNumber 和大型无符号 long long(64 位)整数

    我正在处理来自 JSON 源的大型 64 位无符号整数 这些整数被解析为 NSDecimalNumbers 这显然是 忠实地表示任意精度数字 我遇到的问题是我无法从这门课中得到正确的数字 例如 使用可能的最大值 print unsigned