我不断收到写着如何做数学与NSNumbers
错误“初始化‘的NSNumber * __强烈的’不兼容类型的表达式‘双’”
我的继承人公式:
{
NSNumber *nAt3 = (-1*(([RSSIvalue integerValue] - [aValue integerValue])/(10*log10(3))));
}
RSSIvalue和aValue都是NSNumber类型的对象。
我如何声明nAt3的方式,将使这项工作?
我不断收到写着如何做数学与NSNumbers
错误“初始化‘的NSNumber * __强烈的’不兼容类型的表达式‘双’”
我的继承人公式:
{
NSNumber *nAt3 = (-1*(([RSSIvalue integerValue] - [aValue integerValue])/(10*log10(3))));
}
RSSIvalue和aValue都是NSNumber类型的对象。
我如何声明nAt3的方式,将使这项工作?
使用@()
到数字转换为NSNumber
只是一个或多个字符
{
NSNumber *nAt3 = @(-1*(([RSSIvalue integerValue] - [aValue integerValue])/(10*log10(3))));
}
。例如@(1+1)
给你的东西一样[NSNumber numberWithInt:(1+1)]
你的计算结果是双,所以你需要将其分配给NAT2之前将其转换成一个NSNumber:
NSNumber *nAt3 = [NSNumber numberWithDouble:(-1*(([RSSIvalue integerValue] - [aValue integerValue])/(10*log10(3))))];
编译器指令的解释感谢rdelmar,但bryan击败雅它 – ian
你不能做数学与NSNumber
“但是你可以用他们代表的数字来计算数学。这就是为什么你有两个电话integerValue
- 这将您从NSNumber
的域名移动到NSInteger
域名,然后你做数学。
缺少的是从数字移回NSNumber
- 用现代语法做的事情可以只包含您的表达式在@(...)
,您的情况是[NSNumber numberWithDouble:(...)]
的简写。
哦好吧谢谢你的解释 – ian
哇这样一个简单的解决方案。谢谢布莱恩! – ian
只是添加到这个解决方案,使用@,http://nshipster.com/at-compiler-directives/ – Tim