如何添加 NSMutableArray 中的所有十进制数字

2023-12-02

我有一个NSMutableArray其中有一些NSDecimalNumber在其中,就像(500,50.80,70,8000)

现在我想添加所有这些decimal numbers一起。

我尝试过使用

for (NSDecimalNumber *number in self.numbersArray)
{
    NSDecimal *sum += [number decimalValue]
}

但失败了。


添加全部的简单方法NSNumber数组中的 s 是(类似于@Mahonor 在评论中所说的):

NSArray *myArray = ... // array of NSNumber (or NSDecimalNumber) objects
NSNumber *sum = [myArray valueForKeyPath:@"@sum.self"];

与此相反集合运算符:sum状态,数组中的数字是not转换成double,但要NSDecimal。所以,没有精度损失当添加小数时。甚至NSNumber非十进制数的对象将转换为NSDecimal添加。求和的结果是一个实例NSDecimalValue.

我用两种不同的方式验证(或尝试)这一点。首先,我运行了这段代码

NSNumber *a = [NSNumber numberWithDouble:1.2];
NSNumber *b = [NSDecimalNumber decimalNumberWithString:@"-5.7"];
NSArray *myArray = @[a, b];
id sum = [myArray valueForKeyPath:@"@sum.self"];

并通过设置环境变量“NSObjCMessageLoggingEnabled=YES”激活 Objective-C 消息日志记录。从创建的“/tmp/msgSends-NNNN”文件中可以看出,decimalNumber(并不是doubleValue) 被发送到两个数字对象。

其次,我创建了一个自定义类来实现decimalValue and doubleValue,并应用了@sum.self自定义类的对象数组:

@interface MyClass : NSObject
@property (nonatomic, assign) double value;
@end

@implementation MyClass

- (NSDecimal)decimalValue
{
    return [[NSNumber numberWithDouble:self.value] decimalValue];
}

- (double)doubleValue
{
    return self.value;
}

@end

MyClass *a = [MyClass new]; a.value = 1.2;
MyClass *b = [MyClass new]; b.value = -5.7;
NSArray *myArray = @[a, b];
id sum = [myArray valueForKeyPath:@"@sum.self"];

通过在两种方法中设置断点,可以看出只有decimalValue用于求和(并且valueForKeyPath:@"@sum.self"如果类没有实现则抛出异常decimalValue).

人们还可以看到decimalValue被调用自

-[NSArray(NSKeyValueCoding) _sumForKeyPath:]

该方法的汇编代码表明NSDecimalAdd用于将数字相加。

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

如何添加 NSMutableArray 中的所有十进制数字 的相关文章

  • 在文本视图滚动之前无法看到 UITextView 中的文本

    我的应用程序中有一堆文本视图 由于某种原因 无论我以编程方式 来自互联网 还是通过界面生成器 硬编码 设置 UITextView 文本 无论我做什么 当我在测试时转到该文本视图时它都是空白的 但当我滚动它的那一刻 所有文本就突然出现了 只是
  • 高效创建 x 层深度的嵌套 for 循环

    这可能是一件简单的事情 但我需要创建一个循环结构 使其循环 y x 次以创建 x 和 y 的所有可能组合 例如 如果有 4 个 x 每个 x 有 2 个 y 我想做这样的事情 for int a 0 a lt y a for int b 0
  • iOS 视图控制器内存在被关闭后未释放

    当用户单击按钮时 它会显示一个带有两个视图控制器的新选项卡栏视图控制器 我是这样做的 ACLevelDownloadController dvc ACLevelDownloadController alloc initWithNibName
  • ios 导航 堆栈操作

    我在尝试从 iOS 应用程序操作导航堆栈时遇到问题 或者至少是由于这种操纵而产生的行为 我的情况 我有 3 个 ViewController 控制器a显示多个级别 控制器 b 是游戏视图 控制器 c 是某种分数 显然 我将在控制器 a 中选
  • iPhone UINavigationBar 使用 [UINavigationBar 外观] 更改所有控制器的字体样式

    我知道我可以单独更改导航栏的字体 如本答案所述 更改导航栏的字体 https stackoverflow com questions 5832036 change the navigation bars font 目前我正在使用一种更全局的
  • 推入 UINavigationController 时隐藏 FBFriendPickerViewController 导航栏

    介绍一个实例FBFriendPickerViewController using presentViewController animated completion 非常简单 该类似乎是针对该用例的 但是 我想推送一个实例FBFriendP
  • iphone NSDate 转换问题

    在我的 facebook 图表 Api 中 我正在获取这些数据 来自杰森 updated time 2011 05 17T14 52 16 0000 我正在使用此代码将其转换为有效的日期格式 NSDateFormatter df NSDat
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • iphone:如何停止快门动画?

    我有两个问题 1 我想知道如何在相机加载时停止快门动画 我正在使用 UIImagePickerController 我已经参考了堆栈溢出的许多答案 但没有成功 2 我在相机中有一个自定义按钮 使用cameraOverlayView并想通过单
  • 在 UIImage 顶部绘制透明圆圈 - iPhone SDK

    我在尝试找出如何在 UIImageView 中的 UIImage 顶部绘制透明圆圈时遇到了很多麻烦 谷歌给了我线索 但我仍然找不到有效的例子 有没有人知道的例子可以证明这一点 最简单的方法就是创建一个半透明的方形 UIView 然后将其图层
  • iPhone 和加密库

    我想我必须在我的 iPhone 应用程序中使用加密库 我想问你有关苹果公司实施的加密货币出口政策的影响 我需要做一些额外的事情吗 例如填写表格等 1 如果我使用 MD5 进行哈希处理 2 如果我使用对称加密 Thanks EDIT 2009
  • 使用基于约束的布局自动调整 NSTokenField 的大小

    有没有办法自动调整大小height使用约束的 NSTokenField 保持宽度恒定 sizeToFit应该有效 但事实并非如此 如果我设置一个约束来保持宽度不变并调用此方法 它将忽略约束并仅调整宽度大小 当我想要的是仅调整高度大小时 基于
  • 无法在 Windows 上使用 Gnustep 编译 Objective C

    嗨 我是初学者 学习目标c 我发现错误 hello m 1 34 Foundation Foundation h 没有这样的文件或目录 我开始知道我需要制作一个 make 文件 我可以知道如何制作 make 文件吗 无需创建 makefil
  • 获取对 iOS 应用程序中最顶层视图/窗口的引用

    我正在创建一个可重用的框架 用于在 iOS 应用程序中显示通知 我希望将通知视图添加到应用程序中其他所有内容的顶部 有点像 UIAlertView 当我初始化监听 NSNotification 事件并添加视图作为响应的管理器时 我需要获取对
  • Objective-C中如何使继承的类能够看到父类的隐藏方法[重复]

    这个问题在这里已经有答案了 我有两个类 Class1 和 Class2 第二个类继承自第一个类 我需要重写 Class1 的 update 方法来实现我的目标 继承方法中 update方法的改变是在代码中间进行的 所以我不能使用 超级更新
  • 如何在 Xcode 4 中在 .h 和 .m 之间切换

    刚刚安装的 Xcode 4 到目前为止一切顺利 除了 Apple 更改了所有键盘快捷键 有人知道如何在 h 和 m 之间切换吗 苹果改变了各种快捷键 但要在标头和实现之间切换 新的快捷键是 You can change it back to
  • iOS 10 的错误? NSDate 日本地区时间描述和 24 小时休息

    这似乎是 iOS 10 的一个错误 在 iOS 8 和 9 中都可以 NSDate date description 的小时描述是错误的 它附加了 24 小时描述和 12 小时描述 我没有使用 NSDateFormatter 只是默认设置
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 使用超类初始化器初始化类

    我有两个类 一个是另一个的子类 比如说Animal and Dog 超类有一些初始化器 比如initAnimal 子类有一些初始化器 比如initDog 问题是 从编译器的角度来看 做类似的事情是完全合法的Dog adog Dog allo
  • iPhone 快照,包括键盘

    我正在寻找拍摄整个 iPhone 屏幕 包括键盘 的正确方法 我找到了一些截取屏幕的代码 CGRect screenCaptureRect UIScreen mainScreen bounds UIView viewWhereYouWant

随机推荐

  • 指定用作参考时区的时区

    根据前两个答案 问题与最初发布的一样不清楚 因此我完全重写它 以下问题仅涉及如何存储数据以及存储什么数据 而与检索时转换数据的形状或形式无关 因此 在 SELECT 处转换为所需的时区并不是一个合适的答案 将值插入到带有时区的时间戳字段时
  • Android - 清除导航 Backstack

    我有4页 从第 1 页 gt 第 2 页 gt 第 3 页 gt 第 4 页 用户到达 page 3 并单击按钮后 就会导航到 page 4 单击按钮后 我想清除所有导航历史记录 以便当用户返回 page 4 时 应用程序退出而不是返回 p
  • 尝试连接到 Google API 的 Google Oauth 时 JWT 无效

    我试图通过 JWT 通过 OAuth 连接到 Google API 但我不断收到此错误 error invalid grant error description 无效的 JWT 令牌必须是短期令牌且处于合理的时间范围内 在我的 JWT c
  • 在包含 DOS-cmd 的变量中使用 subprocess()

    我不太擅长编程并且在使用时遇到问题subprocess Python 中的命令 我的程序创建以下字符串 wsl ocrmypdf sr l deu mnt z dms inbox Scan 2019 11 27 13 12 33 pdf z
  • 在 Bash 布尔表达式中使用变量

    有人可以解释如何执行布尔运算并将它们存储在 Bash 中的变量中吗 I tried A true B false C A D A B echo C echo D 我也尝试过不用美元 用 用 如何在bash中完成如此简单的操作 控制台的结果是
  • 如何在ViewPager中设置OnClickListener

    我是 Android 开发新手 正在学习编写和设计 Android 项目 我有问题ViewPager并且无法在此网站上或通过 Google 搜索找到答案 Problem 我无法制作一个Button执行其动作ViewPager 您可以在这里查
  • Java JTable 标头自动换行

    我正在尝试让表格上的标题自动换行 我已经成功做到了这一点 但第一个数据行正在扩展 该表的代码是 public class GenerateTable extends JTable private JCheckBox boxSelect ne
  • 符号扩展 1 位 2 的补数?

    我是一名学生 正在用 C 语言编写一个函数来对给定的位字段进行符号扩展 我正在使用 32 位 我在谷歌上查找了这个答案 但没有找到我想要的东西 我正在编写一个函数 该函数返回从 32 英寸中提取的一个或多个连续位的二进制补码表示形式 最左边
  • jQuery:用方括号发布数组怪癖

    我正在使用以下代码来发帖 var checked 2231 2432 jQuery ajax type post url statusUrl data entries checked 然而 当它实际发布时 服务器端的发布数据和开发人员工具中
  • 无法在 Eclipse 中启动 IBM MobileFirst Foundation Studio 8.0

    操作系统版本 Mac OS Sierra 10 12 3 Eclipse 版本 Neon 3 发布 4 6 3 Steps 下载最新的 Eclipse 版本 为 Java 开发人员安装了 IDE 从 Eclipse Marketplace
  • 如何从循环中的原始资源读取多个文件?

    我有很多文本文件 想将它们放入 for 循环中 我得到了一个 Extra 其中包含上次活动的资源名称 并有一个资源名称为的数组 我的原始资源中的文本文件来自 d0 d1 d2 d3 d79 我想检查名称和数组名称并将查找名称放入资源 我在
  • 如何在docker compose启动时创建表postgresql

    我知道这个问题已经被问过并且也给出了答案 但这对我不起作用 我也遵循同样的做法 我的 postgres 容器运行良好 我在容器内部检查了 docker entrypoint initdb d init sql 是否存在 我使用了以下 doc
  • 如何使用 Junit 5 测试服务提供商实现模块?

    这是我的基本模块 需要实现 myspi 包中定义的接口 各种提供商都可以提供 MyProvider 实现 基础模块通过 myspi MyProvider 接口实现使用它们 module base exports myspi uses mys
  • 无法在 xcode 中创建单视图 ios 应用程序

    I am new to ios xcode and I was trying to follow through the new SwiftUI tutorial The first one has you create a ios sin
  • KornShell 对整数数组进行排序

    KornShell ksh 脚本中有用于对整数数组进行排序的命令吗 在这种具体情况下 我对简单性而不是效率感兴趣 例如 如果变量 UNSORTED ARR 包含值 100911 111228 090822 并且我想将结果存储在 SORTED
  • assemble、a​​ssembleDebug 和 assembleRelease 之间的区别

    我在尝试学习bitrise平台 截至目前 我也不知道这个平台到底有什么用途 无论如何 当我进行设置时 它要求选择gradle task to run 有谁知道 assemble assembleDebug 和 assembleRelease
  • org.json.JSONException: JSONObject["address"] 不是 JSONArray

    我正在 java 中使用 org json 解析 json 我的 json 看起来像 address addressLine1 Noida addressLine2 UP firstName Achyut lastName khanna 我
  • Laravel Blade 在 php 中传递 Javascript 变量

    如何将 javascript 变量作为 php 循环中的变量传递 像这样的东西 显然不起作用 var myJsVar 100 for i 0 i
  • 确保 mongodb 中的索引

    一些问题 如果我在已经索引的字段上确保索引 它会重新索引还是简单地说 是的 我已经索引了 如果某些开发人员的机器上尚不存在该集合 mongo 会启动索引吗 我是否需要再次确保索引或者调用它一次就足够了 什么时候索引 安全 一定需要一些时间
  • 如何添加 NSMutableArray 中的所有十进制数字

    我有一个NSMutableArray其中有一些NSDecimalNumber在其中 就像 500 50 80 70 8000 现在我想添加所有这些decimal numbers一起 我尝试过使用 for NSDecimalNumber nu