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

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.

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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