none
VBScript Frage - 64 bit Wert

    Question

  • Hallo,

    ich hoffe es weiß jemand Rat.
    Wenn ich das Ergebnis der Rechnung 15*(16^14) ausgeben will,
    so erhalte ich 1,08086391056892E+18.
    Weiß jemand wie ich das umgehen kann und dass das richtige Ergebnis ausgegeben wird = 1080863910568919040.
    Meine Werte sind max. im 64 bit Bereich.

    Wscript.Echo 15 * (16 ^ 14)

    Danke
    Reinhard
    Friday, November 27, 2009 1:47 PM

Answers

  • Hallo Reinhard,

    wenn Du so ohne weiteres diese Berechnung erstellst, wählt VBScript den best-passenden Datentypen aus; das wird hier Double sein.
    Du musst es casten oder eine explizit deklarierte Variable verwenden.

    Demo:

     

    Sub Main()

        Dim wert As Long

        Dim var As Object

     

        wert = (15 * (16 ^ 14))

        var = (15 * (16 ^ 14))

        Debug.Print(wert)

        Debug.Print(var)

        Debug.Print(CLng(var))

        Debug.Print(var.GetType.ToString())

     

    End Sub

     

    Ausgabe:

     

    1080863910568919040

    1,08086391056892E+18

    1080863910568919040

    System.Double


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Friday, November 27, 2009 6:55 PM
  • Hallo Reinhard,

    VBScript kennt maximal bei den ganzzahligen Datentypen maximal Long = 32Bit,
    da alles auf einem Variant abgebildet wird.
    Alles andere wird in Fließkomma-Arithmetik abgehandelt. Und ein Double hat eine
    Genauigkeit von 15 Stellen, da bleibt bei Deinem Beispiel etwas auf der Strecke.

    Willst Du höhere Ganzzahlarithmetik mußt Du schon .NET einsetzen, dort gibt es
    auch 64-Bit Ganzzahlen, ggf. via Nachrüstung auch mehr. Das geht z. B. via
    Powershell , die den Windows Scripting Host (VBScript) langfristig ersetzt.

    Gruß Elmar
    Saturday, November 28, 2009 9:05 AM
    Answerer

All replies

  • Hallo Reinhard,

    wenn Du so ohne weiteres diese Berechnung erstellst, wählt VBScript den best-passenden Datentypen aus; das wird hier Double sein.
    Du musst es casten oder eine explizit deklarierte Variable verwenden.

    Demo:

     

    Sub Main()

        Dim wert As Long

        Dim var As Object

     

        wert = (15 * (16 ^ 14))

        var = (15 * (16 ^ 14))

        Debug.Print(wert)

        Debug.Print(var)

        Debug.Print(CLng(var))

        Debug.Print(var.GetType.ToString())

     

    End Sub

     

    Ausgabe:

     

    1080863910568919040

    1,08086391056892E+18

    1080863910568919040

    System.Double


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Friday, November 27, 2009 6:55 PM
  • Hallo Reinhard,

    VBScript kennt maximal bei den ganzzahligen Datentypen maximal Long = 32Bit,
    da alles auf einem Variant abgebildet wird.
    Alles andere wird in Fließkomma-Arithmetik abgehandelt. Und ein Double hat eine
    Genauigkeit von 15 Stellen, da bleibt bei Deinem Beispiel etwas auf der Strecke.

    Willst Du höhere Ganzzahlarithmetik mußt Du schon .NET einsetzen, dort gibt es
    auch 64-Bit Ganzzahlen, ggf. via Nachrüstung auch mehr. Das geht z. B. via
    Powershell , die den Windows Scripting Host (VBScript) langfristig ersetzt.

    Gruß Elmar
    Saturday, November 28, 2009 9:05 AM
    Answerer
  • Hallo Olaf,

    vielen Dank
    Reinhard
    Monday, November 30, 2009 3:43 PM
  • Hallo Elmar,

    hatte ich befürchtet aber gehofft es kenne jemand einen Trick wie ich es doch richtig angezeigt bekomme.
    Vielen Dank
    Reinhard
    Monday, November 30, 2009 3:45 PM