Zum Inhalt springen

Empfohlene Beiträge

Geschrieben
Das ist ein normaler Rundungsfehler. Guck mal hier

also die Zahlen 10.000000000000000 und 13.690000000000000

sind CString die ich mit strtod in double umwandeln will/muss und zusamen adiren,leider kriege ich "normalen Rundungsfehler"

wie kann ich vorgehen, dass ich den "normalen Rundungsfehler"

umgehen bzw. beheben kann ???

Geschrieben
wie kann ich vorgehen, dass ich den "normalen Rundungsfehler"

umgehen bzw. beheben kann ???

Geht es immer nur um zwei Nachkommastellen? Dann rechne gleich mit Hundertsteln und Ganzzahltypen, und benutz die Fließkommatypen nur für die Ausgabe, wenn überhaupt.
Geschrieben
Versuch mal mit long double zu rechnen, das ist AFAIK der genauste simple Datentyp. Wenn das nicht reicht musst entweder eine Bibliothek suchen die beliebig lange Flieskommazahlen handeln kann oder den Rundungsfehler in Kauf nehmen und dein Programm entsprechend anpassen.

Ja ich glaube das ich auch den Fehler im kauf nehmen muss, allerdings wie:

Ich habe:

Double gesamt = 23.690000000000000

Double gesamt1 = 23.689999999999998

Jetzt wenn ich die vergleichen will mit

If (gesasmt != gesamt1)

Rutsche ich in if Anweisung rein obwohl ich es nicht möchte

Wie kann ich es lösen ??

Geschrieben
Wie kann ich es lösen ??
Haben wir doch schon gesagt: Indem du keine Fließkommatypen benutzt. Es gibt nicht umsonst die Regel, dass man float & double nicht auf Gleichheit (oder Ungleichheit) prüfen soll.

Ich frag ja gern nochmal: Geht es immer nur um zwei Nachkommastellen?

Geschrieben
Geht es immer nur um zwei Nachkommastellen? Dann rechne gleich mit Hundertsteln und Ganzzahltypen, und benutz die Fließkommatypen nur für die Ausgabe, wenn überhaupt.

ja aber wie kann ich eine Zahl die ich im CString als 23,21 in zB. Long speichern

Geschrieben

Indem du nicht 23,21 speicherst, sondern 2321. Du multiplizierst den double-Wert mit 100, addierst 0.5 (bzw. -0.5 bei negativen Zahlen), damit richtig gerundet wird, und weist das einer long-Variablen zu.

Geschrieben
Indem du nicht 23,21 speicherst, sondern 2321. Du multiplizierst den double-Wert mit 100, addierst 0.5 (bzw. -0.5 bei negativen Zahlen), damit richtig gerundet wird, und weist das einer long-Variablen zu.

Ja das ist mir schon klar, aber ich speichere nichts, ich kriege den Betrag von Anwendung aus eben so

Geschrieben
ja aber wie kann ich eine Zahl die ich im CString als 23,21 in zB. Long speichern

Ja das ist mir schon klar, aber ich speichere nichts, ich kriege den Betrag von Anwendung aus eben so

Vielleicht könntest du das Problem noch mal genauer erklären.

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...