INT-Wert?
-
Hallo, ich habe folgendes Problem:
Ich möchte wissen ob das Ergebnis einer Rechnung ein int Wert ist.
Wie mach ich das am besten ohne die zahl einmal in float und einmal in int zu speichern und sie dann zu vergleichen?thx
-
if(wert1 == (int)wert1) { printf("Ganzzahliger Wert."); } else { printf("Kein ganzzahliger Wert"); }
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39354.html
-
Vielleicht funktioniert folgendes:
Speicher die Zahl als float ab, dann "chastest" du die Zahl damit du
eine Int-Variable bekommst und dann vergleichst du beide.
Wenn sie gleich sind dann hast du ein Integer:Glaub so müsste es funktionieren!!
-
Vielen Dank.
-
Verwunderlich, dass diese Lösung immer wieder gepostet wird, da sie suboptimal ist. Eine bessere Lösung ist die Verwendung der Funktion floor
if (x == floor(x)) { // Ganzzahl } else { // keine Ganzzahl }
-
aber von fabs(b-a) < epsilon hat wohl auch noch keiner gehoert...
-
Nunja, das hängt ganz davon ab, wie die Anforderungen des OP aussehen. Unbedingt notwendig ist das hier nicht, da der Vorkammateil nicht in dem Masze an Genauigkeitsverlust leidet wie der Nachkommateil. Epsilon ins Spiel zu bringen, ist eigentlich üblicher, wenn man auf einen bestimmten Wert prüft.
-
ich bin fies, ich weiss das:
(floor(0.2 + 0.7 + 0.1) == 1.0)
=> False # binaere floats koennen eben nicht alles exakt darstellen und der fehler wird irgendwann immer groesser(floor(1.9) == 1.0)
=> True
-
Wie ich schon sagte, um das zu beurteilen, kennen wir die Anforderungen des OP nicht. Das muss er schon selbst entscheiden, ob epsilon in seinem Fall sinnvoll ist. Das eigentliche Problem war ein ganz anderes. Also immer schön einen Schritt nach dem anderen.
-
fabs(res - round(res)) < 1e-12
ja, ich weiss schon, ich soll die f***** halten. mach ich auch sofort