关于ios:如何使用NSNumbers进行数学运算

How to do math with NSNumbers

我不断收到错误消息

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

继承我的等式:

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

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

我如何以某种方式声明nAt3?


再多一个角色

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

使用@()将数字转换为NSNumber。 例如 @(1+1)给你类似[NSNumber numberWithInt:(1+1)]的东西


你不能用NSNumber做数学,但你可以用他们代表的数字做数学。 这就是为什么你有两次调用integerValue - 将你从NSNumber的域移动到域NSInteger,然后你做数学运算。

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


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

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