2013-03-15 43 views
8

我試圖從傳感器讀取數據並將其顯示爲百分比。 [某個值]將始終爲0和1之間如何在NSNumber上進行數學運算

這裏是我的代碼:

NSNumber *reading = [some value]; 
reading = [reading floatValue] * 100; 

不過,我得到「分配到的NSNumber *從兼容型浮球_strong」

我是新工作NSNumber對象,並努力瞭解如何顯示我的傳感器讀數爲用戶的百分比。例如:75%

感謝所有幫助

+2

是否有一個特別的原因你使用NSNumber對象?除了在編寫和閱讀plists或JSON等內容時,或者在處理Core Data或Core Image時,通常不需要它們。我傾向於保持「浮動」或「雙倍」,只有在我需要裝盒時纔將它們裝箱。 – 2013-03-16 09:58:24

回答

34

你需要整框或浮動值,將其存儲在的NSNumber,

爲:

NSNumber *reading = @(10.123); 
reading = @([reading floatValue] * 100); 

在此之後,你可以打印/將其轉換爲字符串爲:

NSString *display=[NSString stringWithFormat:@"%@%%",reading]; 

注意%%雙倍e百分比符號

+0

謝謝。這很好用! – sdknewbie 2013-03-15 17:14:51

+0

@sdknewbiew但我認爲這是更重要的「你知道AnoopVaidya代碼做你想要的嗎?」 – John 2013-03-15 17:54:18

+0

@John:很好的問題。我想他會分析我和apurv的代碼。新舊風格的obj-c中的類似代碼。沒有太大的區別。你說的話? – 2013-03-15 17:59:36

7

您應該首先保持浮動值,並且需要從中創建NSNumber。

NSNumber *reading = [NSNumber numberWithFloat:someValue]; 
float newNum = [reading floatValue] * 100; 
reading = [NSNumber numberWithFloat:newNum]; 
+0

爲什麼你會把'someValue'放在下一行再次取消裝箱值?只需在乘法表達式中使用'someValue'。 – 2013-03-16 09:58:56

0

我不喜歡寫多行代碼,因爲我對多行代碼編寫有點懶。我一直在尋找壓縮解決方案。請在下面找到以下解決方案。

float testValue=5.00032; 
    NSString *resultValue=[NSString stringWithFormat:@"%@%%",[NSNumber numberWithFloat:(testValue*100)]]; 

上面的解決方案是浮點值。如果你想提供輸入作爲整數值,請將「numberWithFloat」替換爲「numberWithInt」。

我希望這個解決方案能幫助你。謝謝。