Zahl runden
-
Hi,
ich habe vor einiger Zeit mal folgenden Programmteil geschrieben:
string sub; t = Zeile; int h; stringstream Str; int pos = t.find("="); // Umwandlung String in Zahl if(pos != string::npos) { sub = t.substr (pos + 1); Str << sub; Str >> h; }
Die Zahl die ich an der gesuchten Stelle finde, war damals ganzzahlig. Dies ist jetzt aber eine float-zahl, die ich vorher noch mathematisch runden muss.
Probiert habe ich es mit roundf aus der math.h Libary, jedoch ohne Erfolg. Gibt es einen anderen Weg?
-
Jenö Nyerges schrieb:
Probiert habe ich es mit roundf aus der math.h Libary, jedoch ohne Erfolg.
Definiere "ohne Erfolg".
-
klar sorry --> trotz einbinden von math.h:
undeclared identifier
string sub; t = Zeile; float h; stringstream Str; int pos = t.find("="); // Umwandlung String in Zahl if(pos != string::npos) { sub = t.substr (pos + 1); Str << sub; Str >> h; int j = roundf(h); }
-
Das liegt wahrscheinlich daran, dass es roundf in der math.h (oder eigentlich cmath) gar nicht gibt.
-
Was steht denn in diesem String genau drin? Wild geraten: Wenn der String statt eines Dezimalpunktes, wie es in Amerika üblich ist, ein Dezimalkomma enthält, musst du dem Stream vorher eine deutsche Locale beibringen. Beispiel:
Str.imbue(std::locale("de_DE"));
Ich glaube aber, dass der Locale-String systemabhängig ist.
-
Bei den Systemen die ich kenne ist der locale standardmäßig "C" (also wie englisch).
-
also es steht ein Dezimalpunkt drin, aber der Fehler kommt ja schon beim compilieren. Ich bin immer davon ausgegangen das roundf in der cmath ist ?!
Gibt es eine ähnliche Funktion ?
-
int j = static_cast <int> (h+.5);
-
Sieh besser hier nach wenn du wissen willst was in der cmath drin ist.
http://www.cplusplus.com/reference/clibrary/cmath/@MiP
Wozu hier der static_cast? Das wird implizit sowieso gecastet.
-
Um die Warnung beim Kompilieren zu vermeiden.
-
Versuche es damit:
#include <math.h> float von; // ungerundeter float-Wert float nach; // gerundeter float-Wert float factor; // Hilfsgrösse zum runden int nk; // Anzahl gewünschter Nachkommastellen, nach nk wird gerundet factor = pow10(nk); nach = floor(von*factor+0.5)/factor;
oder wenn es nur um die gerundete Ausgabe geht z.B. mit << setprecision(2) << ...