Veröffentlicht 18. Juli 200520 j double dtest = 0.0 dtest = 10.000000000000000 + 13.690000000000000; [/PHP] im dtest steht 23.689999999999998 warum ??? und wie kann ich es beheben ??
18. Juli 200520 j Autor 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 ???
18. Juli 200520 j 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.
18. Juli 200520 j 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.
18. Juli 200520 j Autor 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 ??
18. Juli 200520 j Das kannst du über einen Epsilonvergleich machen. Hier hab ich dazu mal ein Beispiel gepostet.
18. Juli 200520 j 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?
18. Juli 200520 j Autor 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
18. Juli 200520 j 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.
18. Juli 200520 j Autor 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
18. Juli 200520 j 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.
19. Juli 200520 j Autor Erstmal Danke für Hilfe und Erklärung Das Problem habe ich gelöst, durch Fließkommatypen :eek
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.