2013-11-21 44 views
0

我不断收到写着如何做数学与NSNumbers

错误“初始化‘的NSNumber * __强烈的’不兼容类型的表达式‘双’”

我的继承人公式:

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

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

我如何声明nAt3的方式,将使这项工作?

回答

5

使用@()到数字转换为NSNumber只是一个或多个字符

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

。例如@(1+1)给你的东西一样[NSNumber numberWithInt:(1+1)]

+0

哇这样一个简单的解决方案。谢谢布莱恩! – ian

+0

只是添加到这个解决方案,使用@,http://nshipster.com/at-compiler-directives/ – Tim

2

你的计算结果是双,所以你需要将其分配给NAT2之前将其转换成一个NSNumber:

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

编译器指令的解释感谢rdelmar,但bryan击败雅它 – ian

3

你不能做数学与NSNumber“但是你可以用他们代表的数字来计算数学。这就是为什么你有两个电话integerValue - 这将您从NSNumber的域名移动到NSInteger域名,然后你做数学。

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

+0

哦好吧谢谢你的解释 – ian