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)]的东西
-
哇这么简单的解决方案。 谢谢布莱恩!
-
只是添加到此解决方案,使用@,nshipster.com / at-compiler-directives解释编译器指令
你不能用NSNumber做数学,但你可以用他们代表的数字做数学。 这就是为什么你有两次调用integerValue - 将你从NSNumber的域移动到域NSInteger,然后你做数学运算。
缺少的是从数字移回NSNumber - 现代语法可以将表达式包含在@(...)中,在您的情况下是[NSNumber numberWithDouble:(...)]的简写。
计算结果为double,因此在将其赋值给nAt2之前需要将其转换为NSNumber:
1
| NSNumber *nAt3 = [NSNumber numberWithDouble :(-1*(([RSSIvalue integerValue ] - [aValue integerValue ])/(10*log10(3))))]; |