Ios 数字运算

Ios 数字运算,ios,types,nsnumber,Ios,Types,Nsnumber,我想对NSNumbers执行一些简单的算术,并保留类型。这可能吗 例如: - (NSNumber *)add:(NSNumber *)firstNumber to:(NSNumber *)secondNumber; 是我的方法定义,firstNumber和secondNumber是整数,然后我想返回一个整数,它是两者的整数相加。如果两者都是双精度的,则以双精度返回结果 看起来我可以使用[NSNumber objCType]获得类型(布尔值除外),正如在这个问题中所发现的那样:但是我似乎无法提取

我想对NSNumbers执行一些简单的算术,并保留类型。这可能吗

例如:

- (NSNumber *)add:(NSNumber *)firstNumber to:(NSNumber *)secondNumber;
是我的方法定义,firstNumber和secondNumber是整数,然后我想返回一个整数,它是两者的整数相加。如果两者都是双精度的,则以双精度返回结果

看起来我可以使用
[NSNumber objCType]
获得类型(布尔值除外),正如在这个问题中所发现的那样:但是我似乎无法提取这些类型并进行计算,如果没有大量代码来提取值并进行计算并返回每种可能类型的结果


有没有一种简洁的方法可以做到这一点?

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

如果您想坚持使用Objective-C类操作,可以使用它


另请参见:

将表达式值计算为双精度值(所有输入均为双精度值),然后检查结果是否为整数,如何?然后您只需使用
NSNumber numberwhithint:
NSNumber numberwhithdouble:
返回结果

检查结果值是否为整数时,请确保考虑舍入误差(例如,当1表示为0.9999999等)

编辑:刚刚在NSNumber文档中注意到这句话:

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


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

如果你想做算术,最好的选择是使用一个

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

– decimalNumberByAdding:
– decimalNumberBySubtracting:
– decimalNumberByMultiplyingBy:
– decimalNumberByDividingBy:
– decimalNumberByRaisingToPower:
– decimalNumberByMultiplyingByPowerOf10:
– decimalNumberByAdding:withBehavior:
– decimalNumberBySubtracting:withBehavior:
– decimalNumberByMultiplyingBy:withBehavior:
– decimalNumberByDividingBy:withBehavior:
– decimalNumberByRaisingToPower:withBehavior:
– decimalNumberByMultiplyingByPowerOf10:withBehavior:

由于NSDecimalNumber扩展了NSNumber,它也有NSNumber的所有方法,因此我认为您可以在您的案例中毫无问题地使用它。

如果它们有不同的类型,您打算做什么?很高兴抛出一个错误,或者使用firstNumber类型作为模板。这两种方法都能满足我的需要。没有简明的方法可以做到。你甚至不需要走那么远。NSNumber的目的是将其抽象化。只使用双打是非常愉快的。因为您返回了一个NSNumber,所以无论您输入了什么,您都可以提取任何您想要的表示。看我写的这段话:我听到了!我个人怀疑我是否需要做这些:)我只是想解决OP的问题。这在宏大的计划中是否有意义,是另一个问题,我没有足够的背景来说明这一点。我已经与Cocoa Touch合作一年多了,我从来没有听说过这门课!!疯狂+1.