首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNumber算法

NSNumber算法
EN

Stack Overflow用户
提问于 2012-07-08 15:05:59
回答 3查看 7.5K关注 0票数 6

我想在NSNumbers上执行一些简单的算术运算,并保留类型。这个是可能的吗?

例如:

代码语言:javascript
复制
- (NSNumber *)add:(NSNumber *)firstNumber to:(NSNumber *)secondNumber;

是我的方法定义,而firstNumber和secondNumber是整数,那么我想返回一个整数,这是它们的整数相加。同样,如果两者都是double,则将结果作为double返回。

看起来我可以使用问题get type of NSNumber中的[NSNumber objCType]获取类型(boolean除外),但是如果没有大量的代码来提取值、执行计算并返回每个可能类型的结果,我似乎无法提取这些类型并进行计算。

有没有一种简短而简洁的方法来做这件事呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-08 16:31:28

如果您想执行算术运算,最好的选择是使用NSDecimalNumber

NSDecimalNumber具有执行算术运算的方法,例如:

代码语言:javascript
复制
– decimalNumberByAdding:
– decimalNumberBySubtracting:
– decimalNumberByMultiplyingBy:
– decimalNumberByDividingBy:
– decimalNumberByRaisingToPower:
– decimalNumberByMultiplyingByPowerOf10:
– decimalNumberByAdding:withBehavior:
– decimalNumberBySubtracting:withBehavior:
– decimalNumberByMultiplyingBy:withBehavior:
– decimalNumberByDividingBy:withBehavior:
– decimalNumberByRaisingToPower:withBehavior:
– decimalNumberByMultiplyingByPowerOf10:withBehavior:

因为NSDecimalNumber扩展了NSNumber,所以它也有NSNumber的所有方法,所以我认为你可以在你的例子中使用它,没有任何问题。

票数 10
EN

Stack Overflow用户

发布于 2012-07-08 15:25:02

对于几乎所有的应用程序,都可以使用-doubleValue–initWithDouble:转换为double。这将允许您使用标准的C符号(+,-,...)和函数(exp()sin())。如果您对64位整数值使用接近全精度的值,则唯一会遇到麻烦的方法是。

如果你想坚持使用Objective-C类操作,你可以改用NSDecimalNumber

另请参阅:How to add two NSNumber objects?

票数 3
EN

Stack Overflow用户

发布于 2012-07-08 15:28:35

如何计算双精度型的表达式值(所有的输入都是双精度值),然后检查结果是否为整数?然后,您只需使用NSNumber numberWithInt:NSNumber numberWithDouble:返回结果。

当您检查结果值是否为整数时,请务必考虑舍入误差(例如,当1表示为0.99999999时,等等)。

EDIT:刚刚在NSNumber的文档中注意到了这句话:

请注意,number对象不一定保留创建它们时所使用的类型。

我认为这意味着你不能可靠地做你想要做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11381310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档