[Frage] Runden eines Double-Wertes auf drei Nachkomastellen
-
Hallo,
folgendes Problem. Es soll ein Doublewert auf drei Nachkommastellen gerundet werden. Ich habe die Methode gewählt, die ich hier in den FAQs gelesen habe.
ergebnis *= pow(10, 3); if (ergebnis >= 0) floor(ergebnis + 0.5); else ceil(ergebnis - 0.5); ergebnis /= pow(10, 3);
Folgendes Problem. Der Wert der gerundet werden soll ist 12,56637061...
Als Ausgabe erhalte ich aber:
1.256600e+01
Warum?
Danke für eure Hilfe
-
Du solltest den Rückgabewert von floor() und ceil() vielleicht auch wieder ergebnis zuweisen
-
ich hab zwar keine Ahnung für was du die Abrundung benötigst,
aber hilft es dir nichts, wenn du nur die Ausgabe auf zwei
Nachkommastellen rundest.printf("%.3lf", ergebnis);
-
TactX schrieb:
Du solltest den Rückgabewert von floor() und ceil() vielleicht auch wieder ergebnis zuweisen
Funktioniert nicht.
torSan schrieb:
ich hab zwar keine Ahnung für was du die Abrundung benötigst,
aber hilft es dir nichts, wenn du nur die Ausgabe auf zwei
Nachkommastellen rundest.printf("%.3lf", ergebnis);
ES soll eben gerundet werden, aber trotzdem danke
-
draXo schrieb:
Als Ausgabe erhalte ich aber:
1.256600e+01
Warum?
Der Wert ist doch richtig. Wie gibst du denn aus?
-
draXo schrieb:
1.256600e+01
Warum?
Schon mal etwas von "begrenzte Genauigkeit" gehört? double wird mit einer endlichen Anzahl an (Binär)Stellen gespeichert, wenn dein Wert in diesem Bereich nicht exakt dargestellt werden kann, wird er zum nächsten darstellbaren Wert gerundet.
-
draXo schrieb:
TactX schrieb:
Du solltest den Rückgabewert von floor() und ceil() vielleicht auch wieder ergebnis zuweisen
Funktioniert nicht.
Bei mir funktioniert es, auch mit weit größeren Zahlen. Was funktioniert denn nicht?
-
draXo schrieb:
TactX schrieb:
Du solltest den Rückgabewert von floor() und ceil() vielleicht auch wieder ergebnis zuweisen
Funktioniert nicht.
Schade, aber Du schaffst das schon!
(Dieser Beitrag soll auf die sinnlosigkeit der Antwort "Funktioniert nicht" hinweisen!)