Zahl runden
-
Wenn C Zahlen mit Nachkommastellen 'rundet', dann wird einfach der NAchkommateil abgeschnitten.
Aus 3.6 würde 3.Daher gibt es noch einen Aufschlag von 0.5 vor dem Runden.
So wird aus 3.6 (+0.5) = 4.1 -> 4
Und 3.1 (+0.5) = 3.6 -> 3
-
hää?
moment moment
wenn ich ihm jetzt zb. 3.1415689 übergebe und ich die zahlen auf 2 nachkommastellen haben will, muss ich dann von der zahl erst den aufschlag von 0.5 subtrahieren?
-
Wenn du die Zahl auf zwei Nachkommastellen gerundet haben willst, dann machst du vor der Addition von 0.5 ein *100.0 und um std::floor ein /100.0
-
x *= 100.0; double round(double x) { return (std::floor(x + 0.5))/100.0; }
so?
-
Entweder beides in die Funktion oder beides aus ihr raus.+
z.B.:
double RoundWith2Decimals(double x) { return (std::floor(x*100.0 + 0.5))/100.0; }
oder sowas:
double Round(double x, int nDecimals) { double dFactor=pow(10,nDecimals); return (std::floor(x*dFactor+0.5)/dFactor; }
-
ok, thx
-
hmm, irgendwie macht er mir das mit dem std::floor nicht
er sagt mir: keine Klasse oder namespace vorhanden
-
#include <cmath>
-
hmm, zeigt er mir aber immer noch an
muss ich da nicht irgendwie was mit "namespace" machen?
-
trunc müsste die gleiche funktion wie floor haben. Probier es damit!
-
soll ich dann
std::floor.....
einfach durch
trunc
ersetzen`?
-
Aleksander schrieb:
trunc müsste die gleiche funktion wie floor haben. Probier es damit!
C++ kennt kein trunc. Zumindest nicht bzgl. der geforderten Funktionalität.
@MSS-Software
Welchen Compiler hast du denn? Wenn's ein alter ist, der nicht ganz auf der Höhe der Zeit ist, dann versuch es ohne std:: und mit <math.h>. Nur solltest du bedenken, das dies nicht mehr aktuell ist und in Zukunft evtl. nicht mehr unterstützt wird.
Wenn's dann immer noch nicht funktionieren sollte, dann poste mal die Fehlermeldung.
-
habe das VS 6.0
ohne
std::
compiliert er ohne probleme, nur ob er richtig rundet weiß ich nicht
wenn ich das std:: wieder hinmache, kommt er mit folgender fehlermeldung:
error C2653: 'std' : Keine Klasse oder Namespace
-
ja, funzt auch mir nur
floor
aber warum wieso: keine ahnung
-
Nun, der MS Compiler der Version 6 ist einfach uralt und nicht mehr aktuell, also wenig standardkonform. Ich würde dir empfehlen, zumindest auf Compilerversion 7.1 zu updaten. Auf der MS Homepage gibts dazu ein kostenloses Toolkit.
-
jo, direkt auf der MSN HP?
-
Link hab ich leider nicht im Kopf, aber google wird dir helfen. Stichwort: Visual C++ Toolkit 2003.
-
Ich kenns nur so:
Syntax
ROUND(nExpression, nDecimalPlaces)
Rückgabetypen
Numerisch
Argumente
nExpression
Gibt den numerischen Ausdruck an, dessen Wert gerundet werden soll.
nDecimalPlaces
Gibt die Anzahl von Dezimalstellen an, auf die nExpression gerundet wird.
danke an MSDN