我一直收到错误消息
“使用不兼容类型'double'的表达式初始化'NSNumber * __ strong'”
继承我的等式:
{
NSNumber *nAt3 = (-1*(([RSSIvalue integerValue] - [aValue integerValue])/(10*log10(3))));
}
RSSIvalue和aValue都是NSNumber类型的对象。
如何宣布nAt3以使其有效?
答案 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))))];