Wenn Zahl durch 8 teilbar, dann...

  • Hejo

    Ich bräuchte Hilfe bei einer sicher simplen Sache. Und zwar will ich einfach testen, ob eine Zahl durch 8 teilbar ist (also ohne Komma). Etwas peinlich, dass ich das nicht hinbekomme.

    Ich dachte es geht mit vielleicht VarGetType, aber ich bekomme immer "double" zurück, egal ob die Zahl ein Komma hat oder nicht. Laut Hilfe-Beispiel müßte ich bei Zahlen ohne Komma ein "Int32" bekommen. :?:

    [autoit]

    $var = 16
    $ergebnis = $var/8
    $typ = VarGetType($ergebnis)
    ConsoleWrite($typ & "(" & $ergebnis & ")" & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    $var = 16
    $ergebnis = $var/7
    $typ = VarGetType($ergebnis)
    ConsoleWrite($typ & "(" & $ergebnis & ")" & @CRLF)

    [/autoit]
  • Ich hätte da mal ne Frage:
    Warum zeigt mir die Msgbox zwei "gleiche" Werte an, obwohl die Werte offenbar nicht identisch sind?
    Werden die Nachkommastellen zwar berechnet, aber nicht angezeigt?
    Wenn ja, wie kann ich die Genauigkeit so einstellen, dass ich alle berechneten Stellen zu sehen bekomme?

    Simples Beispiel, das ohne Rundungsfehler auch ohne Round(...) auskommen müsste - oder zumindest nicht
    die selben Ergebnisse liefern.

    [autoit]

    For $i=0 To 1000 ; 1001 testwerte die fast alle 'ungleich' seien sollen
    $a = Random(1,100000,1)
    $b = Random(1,100000,1)
    If Mod($a,$b) <> myMod($a,$b) Then MsgBox(0,"Ungleich",$a&", "&$b&@CRLF&Mod($a,$b)&@CRLF&myMod($a,$b))
    ;Da die MsgBox ausgeführt wird, nehme ich an, dass intern mehr Nachkommastellen berechnet werden, aber NICHT angezeigt, warum?
    Next

    [/autoit][autoit][/autoit][autoit]

    Func myMod($a,$b)
    ; mit Round(...) klappts tadellos
    Return $b * ($a/$b - Floor($a/$b))
    EndFunc

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Ersetze mal deine msgBox mit folgender Zeile:

    [autoit]

    ConsoleWrite(StringFormat("%.15f", Mod($a, $b)) & @TAB & StringFormat("%.15f", myMod($a, $b)) & @CRLF)

    [/autoit]


    Dann siehst du gleich das es so ist wie du vermutet hast: Es handelt sich um Rundungsfehler.

  • Jop wunderbar funktioniert tadellos :thumbup:
    Für die Zukunft werd ich mir StringFormat genauer anschauen müssen :)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!