Zum Inhalt springen

Vergleichen von float Zahlen in C


Raving Alien

Empfohlene Beiträge

hi,

ich möchte zwei float Zahlen mit einander vergleichen, dies gelingt auch sehr einfach mit if.

Mein Problem ist nun, dass er bis auf die letzte Stelle nach dem Komma vergleicht.

Ist es Möglich, dass er nur bist zur 2. Stelle nach dem Komma vergleicht(also bis auf ein hunderstel genau) ?

Danke schon mal.

------------------

: .. ··> { aLeXaNdEr GrAmAnN }

 : .. ··> { Techno Party Days }

Link zu diesem Kommentar
Auf anderen Seiten teilen

Einfacher ist es, wenn du setpresision nimmst, wobei n die Anzahl der NAchkommastellen ist. Kannst Bei Progistart die ANzahl als Variable einlesen lassen....

TOlereanz:

Z.B.

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica">Zitat:</font><HR>Original erstellt von aLeXg:

Wie genau kann ich denn einen

Toleranzbereich festsetzen ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

das problem an der iomanip ist, das sie wie der name auch schon vermuten lässt. ( Input/ Output Manipulatoren) meines wissen nach nur was mir der ausgabe zu tun hat. zum beispiel:


float x=2.345;

cout<<setprecision(1)<<x; // liefert 2.3

also nicht zum vergleichen geeignet. mir würde jetz so etwas einfallen, wie mal 100, casten in int, casten in float, geteilt durch 100. beispiel:

float x=2.345;

x*=100; // komma um zwei stellen verschieben 234.5

int tmp = (int) x // überflüssige kommastellen abhacken

x=(float) x/100 // komma um zwei stellen verschieben 2.34

ich hoffe es läuft damit.

------------------

mfg maddin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde vorschlagen, die float-Zahlen in geeigneter Weise in int-Zahlen umzuwandeln und diese dann zu vergleichen. (Ähnlich dem Vorschlag von maddin; hier bleiben jedoch die Werte erhalten)

Beispiel: Die Floatzahlen f1 und f2 sollen mit zwei Nachkommastellen verglichen werden:

int i1 = 100 * f1;

int i2 = 100 * f2;

if (i1 > i2)

...undsoweiter...

es geht auch kürzer (aber nicht unbedingt übersichtlicher):

if ((int)(100 * f1) > (int)(100 * f2))

...

Und je nach notwendiger Genauigkeit, Größe der Zahl und Einstellung des Compilers (int standardmäßig mit 8 oder 16 bit) empfiehlt es sich, long statt int als Datentyp zu verwenden, aber das Prinzip bleibt dasselbe.

[Dieser Beitrag wurde von IngH am 22. März 2001 einige Male editiert.]

[Dieser Beitrag wurde von IngH am 22. März 2001 editiert.]

Link zu diesem Kommentar
Auf anderen Seiten teilen

@IngH

versuch mir bloß nicht zu erzählen, wie man ein ganzes programm in eine zeile schreib. das kann ich selber gut genug.

*wolltelehrerschonimmermalmiteinerdeklarationdesfünftengrsadesschocken*

zu dem steprecision()

man kann in c++ die ausgabe formatieren. eine möglichkeit ist es sogenannte manipulatoren zu verwenden. das sind spezielle funktionen die man gleich bei der ausgabe mit verwenden kann.

in etwa so: cout<<endl;

im beispiel ist ein manipulator der bekannterren art zu sehen, den man glaube ich kennt. diese manipulatoren machen nichts anderes als die ausgabe zu verändern. so zum beipiel fügt "endl" einen zeilenvorschub ein und lehrt den puffer.

ein andere manipulator ist zum beispiel:

setprecesion(int);

mit ihm kann man die genauigkeit der ausgegebenen zahl bestimmen.

beispiel:´

#include <iomanip>

using namespace std;

cout<<setprecision(3)<<1.2<<endl;

würde so geschrieben "1.200" ausgeben, weil durch den manipulator gesagt wurde, das die genauigkeit 3 stellen betragen soll.

wenn du noch wissen willst, welche manipulatoren es gibt, dann sollte dir die msdn weiter helfen. mehr fallen mir im momment auch nicht ein. als suchbegriff sollte entweder "manipulator" herhalten dürfen oder auch "iomanip.h". das ist die headerdatei, in der die etwas komplexeren manipulatoren deklariert wurden. so zum beispiel auch setprecision();

ich hoffe das hat ein wenig geholfen und das ich mich verständlich ausgedrückt haben

------------------

mfg maddin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...