Double Wert vergleichen

  • C#

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von MrLaTuNiX.

    Double Wert vergleichen

    hi Leute ne ganz einfach frage ich habe einen double wert den ich auslese und will den vergleichen mit der Zahl 85 aller dings wenn ich zum beispiel das hier machen


    if ( 85 < test )
    { // Aktion}
    else { // Aktion}

    wenn test den wert 200 hätte müsste ich ja jetzt ein TRUE bekommen richtig ?
    oder bin ich grad einfach dumm...

    *Thema verschoben - hat nichts mit WPF zu tun* ~NoFear23m

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Ja, dann wird die erste Aktion ausgeführt, nicht die bei Else. Aber was hat das mit WPF zu tun?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Da ich selber schon einmal in der Zwickmühle war, hier ein kleiner Hinweis:

    Bei einem Vergleich musst du immer auf Datengleichheit hinarbeiten.

    Man nehme die Variablen:
    Dim A As Integer
    ​Dim B As Short
    ​Dim C As Byte

    man weise allen 85 zu und (je nach Programmiersprache und Framework) bekommst du bei

    If A = B Then
    If B = C Then

    jeweils andere Werte geliefert. Nicht alle liefern unter den oben genannten Umständen True zurück. Bei C# (.Net-Framework 4.8) zum Beispiel musst du erst den Zielwert in den anderen konvertieren, da er zwei unterschiedliche Datentypen mit (theoretisch) gleichen Inhalt nicht vergleichen kann und deshalb immer False liefert.

    Wenn du also auf einen Wert vergleichen willst, caste immer alle Werte in die gleiche Datenbasis - dann bleiben solche Fehler erspart
    Zusatz zu @Eierlein: Betrifft auch nur Ergebnisse aus Berechnungen. Bei zugewiesenen Werten gibt es im Regelfall keine Probleme. Problematisch sind nur Berechnungen, was daran liegt, dass das .NET Framework Double- und Single-Werte als binäre Brüche zwischenspeichert, wodurch theoretisch zwei Werte, die unterschiedliche Berechnungen durchlaufen, die eigentlich das gleiche Ergebnis liefern sollten, nicht identisch sind, sondern in der letzten darstellbaren Nachkommastelle voneinander abweichen und somit nicht vergleichbar sind. Daher prüft man Double-Werte entweder durch einen formatierten String-Abgleich oder einen konvertierten Decimalabgleich (Berechnung wird ebenfalls mit Decimalwerten durchgeführt) oder durch toleranzbehafteten Similar-Abgleich.

    Einfachste Variante, die dein Problem lösen sollte:

    C#-Quellcode

    1. if ( (double)85 < test )



    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    @PadreSperanza What :?:

    Teste gefälligst solch elementaren Code, bevor Du hier Falschmeldungen verbreitest :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Schwieriges Unterfangen, vor allem wenn noch Nachkommastellen vorhanden sind.

    Ich hatte in meinem Leben erst einmal einen Fall, wo ich zwei Double-Werte auf Gleichheit prüfen musste, und es musste wirklich exakt genau sein.

    Ich habe das dann so gelöst, dass ich den Double-Wert in Bytes (8 Bytes) konvertiert habe. So hat es auf jeden Fall funktioniert.

    VB.NET-Quellcode

    1. ​Dim bytes = BitConverter.GetBytes(doublenumber)
    2. If bytes.SequenceEqual(expectation) Then
    3. ' ....
    4. End If


    Freundliche Grüsse

    exc-jdbi

    RodFromGermany schrieb:

    @PadreSperanza What :?:
    vb-paradise.de/index.php/Attac…5c5867624195444f1f7861bc8 vb-paradise.de/index.php/Attac…5c5867624195444f1f7861bc8
    Teste gefälligst solch elementaren Code, bevor Du hier Falschmeldungen verbreitest :!:

    Habe ich. Und bei C# -habe ich auch im Thread erwähnt - habe ich einen Vergleich angestellt zwischen zwei Variablen, die beide den Wert "4" innehatten. Das Problem: Eine war als int32 definiert, der andere Wert als Byte. Und das Ergebnis lieferte mir in der Tat false zurück. Als ich ein ​Convert.ToInt32(...) aus dem Byte machte, lieferte mir derselbe Code true. Und ich habe an diesem Code tatsächlich nur das geändert.

    Insofern weiß ich nicht, ob irgendetwas anderes im Code da noch Einfluss hatte, Fakt ist und bleibt aber: durch das Hinzufügen der Convert-Methode und dem Umwandeln hat es plötzlich funktioniert.
    @PadreSperanza
    Fakt ist auch: Wenn ich einen Apfel in eine Birne umwandel kann ich beide miteinander vergleichen…
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    PadreSperanza schrieb:

    Habe ich.
    Dann poste den Code, mit dem die Vergleiche fehlschlugen und benenne konkret die Bedingungen, dass wir das nachvollziehen können.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!