数学与NSNumbers和整数

ysk*_*ker 5 math cocoa objective-c xcode4.2

在objective-c中,我试图评估以下表达式:_c = _f / 5 * 8; 它告诉我a int和a NSNumber是二进制表达式的无效参数.

怎么了?我刚刚开始使用objective-c和cocoa,但我熟悉php和基本的,有点熟悉javascript.

Ita*_*ber 11

Objective-C有几种不同的结构供您在计算中使用.从其C-根到来的原始数字,ints和floats和doubles和等,可以在其上直接执行算术运算(+,-,*,/,等).这些是你想要使用的.

在更高的杠杆上,Objective-C也有NSNumber对象,它们是上面列出的原始类型的简单包装器.它们在整个Objective-C中使用,其中需要存储基元(通常在其他对象中,例如不直接采用原始值的数组和字典).因为NSNumbers是对象,所以不能对它们执行直接算术运算,必须首先绘制它们的原始值(intValue例如,使用获取整数值,或doubleValue获得双精度浮点数).因为目前还不清楚什么变量在你的问题表示,我不会冒险去猜测它是什么,你现在要做的(我不想误导大家),但你可以找到更多关于NSNumber在的NSNumber类参考.

最后,正如理查德提到的那样,有NSDecimalNumber.这些几乎从未使用过,因为它们或者根本不需要(它们被设计为保持极高精度的数字,远远超出常规原始值的容量),或者使用起来太复杂.它们也有自己的方法来执行算术运算,并且通常与日常使用无关.同样,如果您有兴趣,请查看NSDecimalNumber类参考.

在大多数情况下,您希望使用原始数字来进行计算.当您需要存储它们时,您通常可以从NSNumber对象"装箱"和"取消装箱"(存储和检索).

  • +1,但我会说NSDecimalNumber是一个很好用于货币值的类型. (4认同)

Nov*_*arg 5

你不能用对象做这些事情(在这种情况下是NSNumber).所以你必须采用它的'int/double/long/float值.我不知道哪一个是NSNumber,所以这里有2个解决方案,1个可以工作:

_c = [_f doubleValue] / 5 * 8;
Run Code Online (Sandbox Code Playgroud)

要么:

_c = [NSNumber numberWithDouble:(_f / 5 * 8)];
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你