在objective-c中我试图评估以下表达式:_c = _f / 5 * 8;
它告诉我int
和NSNumber
是二进制表达式的无效参数。
什么错了?我刚刚开始使用objective-c和cocoa,但我熟悉php和基本知识,并且熟悉javascript。
答案 0 :(得分:11)
Objective-C有几种不同的结构供您在计算中使用。从它的C根出现原始数字int
s,float
s,double
s等,您可以在其上直接执行算术运算(+
,{{1 }},-
,*
等)。这些是你想要使用的。
在更高的杠杆上,Objective-C也有/
个对象,它们是上面列出的原始类型的简单包装器。它们在整个Objective-C中使用,其中需要存储基元(通常在其他对象中,例如不直接采用原始值的数组和字典)。因为NSNumber
是对象,所以不能对它们执行直接算术运算,您必须首先绘制它们的原始值(例如,使用NSNumber
来获取整数值,或{{1}获取双精度浮点数)。因为不清楚变量在你的问题中代表什么,我不打算猜测你想要做什么(我不想误导你),但你可以找到更多关于{ NSNumber
Class Reference中的{1}}。
最后,正如理查德所说,有intValue
个。这些几乎从未使用过,因为它们或者根本不需要(它们被设计为具有极高精度的数字,远远超出常规原始值的容量),或者太复杂而无法使用。它们也有自己的方法来执行算术运算,并且通常与日常使用无关。同样,如果您有兴趣,请查看NSDecimalNumber
Class Reference。
在大多数情况下,您希望使用原始数字进行计算。当您需要存储它们时,您通常可以从doubleValue
个对象“装箱”和“取消装箱”(存储和检索)。
答案 1 :(得分:5)
您无法使用对象执行这些操作(在本例中为NSNumber)。所以你必须采用它的'int / double / long / float值。我不知道哪一个是NSNumber,所以这里有2个解决方案,1个可以工作:
_c = [_f doubleValue] / 5 * 8;
或:
_c = [NSNumber numberWithDouble:(_f / 5 * 8)];
希望有所帮助
答案 2 :(得分:0)
NSNumber
s不能应用数学符号。在你的情况下,你的代码实际上看起来像这样,使用NSDecimalNumber(它有选择器来乘以和除数):
NSDecimalNumber *_c = nil;
NSDecimalNumber *_f = [NSDecimalNumber decimalNumberWithString:@"7"];
_c = [[_f decimalNumberByDividingBy:[NSDecimalNumber decimalNumberWithString:@"5"]] decimalNumberByMultiplyingBy:[NSDecimalNumber decimalNumberWithString:@"8"]];
这很丑陋,但它是客观c处理数字的方式。另一种方法是获取每个目标数字的doubleValues,然后乘以它们。