2013-03-15 21 views
8

Ich versuche, einen Messwert von einem Sensor zu nehmen und es als Prozentsatz anzuzeigen. [Some value] wird immer zwischen 0 und 1.Wie berechne ich NSNumber

Hier ist mein Code:

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

Allerdings bekomme ich "Zuordnung zu NSNumber * _strong von inkompatiblen Typ float"

Ich bin neu um NSNumber-Objekte zu bearbeiten und zu verstehen, wie ich meinen Sensorwert als Prozentsatz für den Benutzer anzeigen kann. Ex: 75%

Vielen Dank für jede Hilfe

+2

Gibt es einen besonderen Grund, warum Sie NSNumber-Objekte überhaupt verwenden? Normalerweise werden sie nicht benötigt, außer beim Schreiben und Lesen von Plisten oder JSON oder etwas, oder vielleicht beim Umgang mit Core Data oder Core Image. Ich neige dazu, 'float's oder' double's zu halten und boxe sie nur an dem Punkt auf, an dem ich sie boxen muss. –

Antwort

34

Sie müssen integer Feld oder Wert schweben speichern in NSNumber,

als:

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

Danach können Sie drucken/wandeln sie in String als:

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

HINWEIS %% Doppe e Prozentzeichen

+0

Danke. Das funktioniert großartig! – sdknewbie

+0

@sdknewbiew Aber ich denke es ist wichtiger "Verstehst du, dass AnoopVaidya Code das tut, was du willst?" – John

+0

@John: Nette Frage. Ich denke, er hätte zwischen meinem und apurvs Code analysiert. ähnlicher Code im neuen und alten Stil obj-c. Nichts viel Unterschied. was du sagst? –

7

Sie sollten den Wert in Float zuerst und die NSNumber aus dem Wert beibehalten.

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

Warum würden Sie 'someValue' einpacken, nur um den Wert in der nächsten Zeile wieder zu entpacken? Verwenden Sie einfach 'someValue' im Multiplikationsausdruck. –

0

Ich mag nicht Multi-Line-Code zu schreiben, weil ich mehrzeiligen Code schreiben ein bisschen faul bin. Ich bin immer auf der Suche nach komprimierten Lösungen. Nachfolgend finden Sie die folgenden Lösungen.

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

Die obige Lösung ist für den Float-Wert. Wenn Sie eine Eingabe als Ganzzahl angeben möchten, ersetzen Sie bitte "numberWithFloat" durch "numberWithInt".

Ich hoffe, dass diese Lösung Ihnen helfen wird. Vielen Dank.