Rechenproblem 0.016666666666700000000000000000 * 60, Rechnet falsch

Allgemeine Diskussion Rechenproblem 0.016666666666700000000000000000 * 60, Rechnet falsch

  • Montag, 10. Dezember 2012 16:24
     
      Enthält Code
    Dim nTest1, nResult
    nTest1 = 0.016666666666700000000000000000
    nResult = Test1 * 60
    MsgBox(nTest1)
    MsgBox("Result: " &nResult) 'Result: 9,99999999999801E-03

    Hallo Leute,

    irgendwie stimmt meine Berechnung nicht nResult sollte ganzgenau 

    "1,000000000002000000000000000000"

    ergeben, ich weis leider nicht wo mein Fehler ist.

    Ich habe es auch schon bei Excel nachgerechnet

    0,016666666666700000000000000000 * 60 = 60

    Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter

Alle Antworten

  • Montag, 10. Dezember 2012 16:35
     
     

    Hi Florian,

    schau mal hier was Rundungsfehler angeht.

    Dann möchte ich dich nochmal darauf hinweisen, was Olaf im anderen Thread gesagt hat.

    Das es besser ist die Typen zu Deklarieren.

    MFG

    Björn

  • Montag, 10. Dezember 2012 17:19
     
      Enthält Code

    Hallo Florian,

    Du solltest unbedingt Option Explict und Option Strict einschalten, sonst tappst Du noch häufiger in die Falle der impliziten Typkonvertierung.

    Dann Dein Code: Du deklarierst nTest1 ohne expliziten Typen, rechnest mit Test1 (ohne Präfix n); auch nicht richtig.

    Deklariere die Typen richtig, dann kommt auch das richtige Ergebnis bei raus:

    Public Sub Test()
        Dim nTest1 As Double, nResult As Double
    
        nTest1 = 0.0166666666667
        nResult = nTest1 * 60#
        MsgBox (nResult)
    
    End Sub


    Olaf Helper

    Blog Xing

  • Dienstag, 11. Dezember 2012 07:43
     
     
    Leider kann ich die Variablen nicht deklarieren da ich in einem ERP Anpassungen in VBScript tätige und dor leider keine Deklarationen möglich sind, mir wäre es so auch lieber

    Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter


  • Dienstag, 11. Dezember 2012 10:35
     
      Enthält Code

    Hallo Florian,

    wenn ich es so in VBScript verwende, also die 60.0 als Fließzahl angebe, kommt 1,000...02 bei raus:

    Option Explicit
    
    Dim nTest1, nResult
    
    nTest1 = 0.0166666666667
    nResult = nTest1 * 60.0
    MsgBox (nResult)


    Olaf Helper

    Blog Xing

  • Dienstag, 11. Dezember 2012 12:40
    Moderator
     
     

    Hallo Florian,

    mir fällt noch auf, dass Du mit der falschen Variablen rechnest. Die Zuweisung geht auf:

      nTest1

    Die Berechnung erfolgt aber mit:

      Test1

    Wenn ich deinen Code nehme und nur Test1 * 60 durch nTest1 * 60 ersetze, kommt das gewünschte Ergebnis (natürlich ohne die nachfolgenden Nullen hinter der 2 im Ergebnis) raus.

    Dennoch wäre es sinnvoller, die Werte bspw. über CDbl( ... ) umzuwandeln. VBScript interpretiert das zwar oft richtig, aber halt eben nur oft, nicht immer :)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

  • Freitag, 21. Dezember 2012 13:44
    Besitzer
     
     
    ****************************************************************************************************************
    Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
    Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
    ****************************************************************************************************************

    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.