Rundung einer Gleitkommazahl in objective-c

8

Ich möchte wissen, ob es eine einfache Funktion gibt, mit der ich dieses Beispiel benutzen kann. Ich habe ein

%Vor%

Ich möchte es mit etwas wie

umrunden %Vor%

Und ich bekomme "1.123" Gibt es irgendeine Library oder Standardfunktion dafür oder ich sollte einen Codeblock für diese Art von Berechnungen schreiben?

danke für Ihre Hilfe im Voraus

    
nfarshchi 10.07.2012, 09:55
quelle

7 Antworten

7

Die Verwendung von NSLog(@"%f", theFloat) gibt immer sechs Dezimalstellen aus, zum Beispiel:

%Vor%

Ausgabe:

%Vor%

Mit anderen Worten, Sie werden niemals 1.123 erhalten, wenn Sie NSLog(@"%f", theFloat) verwenden.

Cut-off nach drei Dezimalstellen:

%Vor%

Ausgabe:

%Vor%

Rund drei Dezimalstellen (mit roundf() / lroundf() / ceil() / floor() ):

%Vor%

Ausgabe:

%Vor%

Rund um drei Dezimalstellen (schmutziger Weg):

%Vor%

Ausgabe:

%Vor%     
Anne 10.07.2012, 10:18
quelle
3

Verwenden Sie zum Drucken des Wertes:

%Vor%

Das Runden auf 3 Dezimalstellen vor Berechnungen ist nicht wirklich sinnvoll, weil float keine genaue Zahl ist. Selbst wenn Sie es auf 1.123 runden, wird es so etwas wie 1.122999999998 sein.

Regeln:

  1. In der Regel wird nur abgerundet, um das Ergebnis zu drucken - der String-Formatierer kann damit umgehen (siehe oben).
  2. Verwenden Sie für genaue Berechnungen (z. B. Währung) keinen Fließkommawert, verwenden Sie NSDecimalNumber oder Festkommaarithmetik.
Sulthan 10.07.2012 10:16
quelle
1

Fließkommazahlen haben keine Nachkommastellen, sie haben Binärstellen. Dezimalzahlen haben Dezimalstellen. Gleitkommazahlen können nicht auf bestimmte Dezimalstellen gerundet werden, es sei denn, Sie konvertieren in eine Dezimalzahl. Keine Routine, Methode, Funktion etc., dass einen Fließkommawert zurückgibt kann diese Aufgabe möglicherweise ausführen.

    
EJP 11.07.2012 00:12
quelle
0

Beachten Sie, dass "Round" nicht unbedingt so einfach ist wie Sie denken. Zum Beispiel

DIY-Rechner: Rundungsalgorithmen 101 listet 16 verschiedene Methoden zum Runden einer Zahl auf.

Wikipedia: Das Runden umfasst eine Menge des gleichen Bodens

Und Cplusplus hat Quellcode für eine Reihe von Rundungsalgorithmen , die leicht in objective-c <übersetzbar sind / p>

Wie Sie runden möchten, hängt vom Kontext Ihrer Daten ab.

Und ich möchte darauf hinweisen, dass Stack Overflow bereits eine eine Fülle anderer Fragen zum Runden in objective-c

    
Peter M 10.07.2012 10:34
quelle
0
%Vor%     
Lil C Big Durkee 05.03.2013 01:15
quelle
0

Hier ist eine einfache Möglichkeit:

%Vor%

Bei einer beliebigen Dezimalstelle ersetzen Sie 1000.0f im obigen Code durch

%Vor%     
Adam Freeman 22.05.2015 20:59
quelle
-1

probiere

aus %Vor%     
Denis Kulygin 10.07.2012 10:05
quelle