2013-11-21 84 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