繁体   English   中英

数学与NSNumbers和整数

[英]Math with NSNumbers and ints

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

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

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

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

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

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

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

_c = [_f doubleValue] / 5 * 8;

要么:

_c = [NSNumber numberWithDouble:(_f / 5 * 8)];

希望能帮助到你

NSNumber不能应用数学符号。 在你的情况下,你的代码实际上看起来像这样,使用NSDecimalNumber(它有选择器来乘法和除数):

NSDecimalNumber *_c = nil;
NSDecimalNumber *_f = [NSDecimalNumber decimalNumberWithString:@"7"];

_c = [[_f decimalNumberByDividingBy:[NSDecimalNumber decimalNumberWithString:@"5"]] decimalNumberByMultiplyingBy:[NSDecimalNumber decimalNumberWithString:@"8"]];

它很丑陋,但它是客观c处理数字的方式。 您的另一种选择是获取每个目标数字的doubleValues,然后将它们相乘。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM