fehler in if statemant abfrage

  • hi leute :) ich habe ein problem mit einem ifstatement.

    ich geb hier erstmal den codeschnipsel:
    http://pastebin.com/PZTRSc2c

    das problem ist jetzt folgendes.
    im statement der zeile 385 stimmt etwas nicht.
    ich lasse dort zwei werte vergleichen wovon der eine groeßer ist als der andere.
    nur kann die if abfrage diese tatsache nicht erkennen o.0

    das programm sollte eigentlich eine schach ki werden. jetzt steh ich aber vor diesem if statement problem. diese if abfrage sollte kontrollieren ob ein schwarzer bauer rueckwaerts gezogen wird.

    ausschnitt:
    http://pastebin.com/DPwDq1ET

    ich nehme mir einen schwarzen bauern, klicke ihn an, ruecke ihn eins runter
    und erhalte zb. folgende nachricht:
    "if (71.999999999999>121.999999999999) { thats true o.0 }".
    also, es wird die if abfrage fehlerhaft behandelt.

    71.999999999999 ist nunmal nach adam ries nicht groeßer als 121.999999999999.

    ...tja, ich weis nicht weiter
    vllt kann mir ja jemand sagen woran es liegt?

    scite: Sc1
    Version 1.79

    au version: v3.3.6.1

    Einmal editiert, zuletzt von chema (24. Juni 2012 um 19:30) aus folgendem Grund: frage geloest!

  • ja o.0 jetzt funzt es. thx!

    aber wieso geht es dann bei allen anderen abfragen die auf die selbe weise behandelt werden?
    ;---pawn-white---

    ...if $drawix[3]<$drawi[2] or $drawix[3]>$drawi[2]+$ker Then

    zb das selbe. und da geht es auch ohne extra erklaerung ans script das es eine nummer ist.
    das versteh ich jetzt noch nicht ganz, wieso es einmal geht und einmal nich^^

    • Offizieller Beitrag

    Eventuell liegt es daran, dass für Integer automatisch ein Test gemacht wird, beim Vergleich also 53 als Zahl behandelt wird, bei 52.99999999 (was durch einen kleinen Rundungsfehler entstehen kann, aber halt keine ganze Zahl/Integer ist) aber ein Zeichenkettenvergleich gemacht wird.
    Vielleicht ist es aber noch viel einfacher: Es funktioniert "zufällig" auch beim Zeichenkettenvergleich. 52.99999 > 3.999999 funktioniert auch bei Zeichenketten, weil 5 > 3 gilt.

    Johannes

  • Eventuell liegt es daran, dass für Integer automatisch ein Test gemacht wird, beim Vergleich also 53 als Zahl behandelt wird, bei 52.99999999 (was durch einen kleinen Rundungsfehler entstehen kann, aber halt keine ganze Zahl/Integer ist) aber ein Zeichenkettenvergleich gemacht wird.
    Vielleicht ist es aber noch viel einfacher: Es funktioniert "zufällig" auch beim Zeichenkettenvergleich. 52.99999 > 3.999999 funktioniert auch bei Zeichenketten, weil 5 > 3 gilt.

    Johannes

    daran das es ein integer wert ist oder nicht kann es nicht liegen. es werden sogar teils genau die selben wertarten verwendet mit unterschiedlichen if statement ausgang.


    das was du als "zufall" ansprichst wirds wohl sein.
    es nimmt die ersten zahlen des strings und vergleicht diese dann auch als zahlen.


    if $drawix[3]>"2"&$drawi[2] Then
    ConsoleWrite($drawix[3] & ">2" & $drawi[2] & @CRLF)
    EndIf
    ...

    71.999999999999>2121.999999999999
    221.999999999999>2171.999999999999

    da erkennt man das muster ganz gut :)

    thx fuer deine hilfe :)