如何使用NSNumbers进行数学运算

时间:2013-11-21 22:14:11

标签: ios objective-c math

我一直收到错误消息

“使用不兼容类型'double'的表达式初始化'NSNumber * __ strong'”

继承我的等式:

{ 
NSNumber *nAt3 = (-1*(([RSSIvalue integerValue] - [aValue integerValue])/(10*log10(3))));
}

RSSIvalue和aValue都是NSNumber类型的对象。

如何宣布nAt3以使其有效?

3 个答案:

答案 0 :(得分:5)

再多一个角色

{ 
NSNumber *nAt3 = @(-1*(([RSSIvalue integerValue] - [aValue integerValue])/(10*log10(3))));
}

使用@()将数字转换为NSNumber。例如@(1+1)为您提供[NSNumber numberWithInt:(1+1)]

之类的内容

答案 1 :(得分:3)

您无法使用NSNumber进行数学运算,但您可以使用它们所代表的数字进行数学运算。这就是为什么你有两次调用integerValue - 这会将你从NSNumber域转移到NSInteger域,然后你就算数学了。

缺少的是从数字转回NSNumber - 现代语法可以将您的表达式括在@(...)中,在您的情况下,这是[NSNumber numberWithDouble:(...)]的简写。

答案 2 :(得分:2)

计算结果为double,因此在将其分配给nAt2之前需要将其转换为NSNumber:

NSNumber *nAt3 = [NSNumber numberWithDouble:(-1*(([RSSIvalue integerValue] - [aValue integerValue])/(10*log10(3))))];