Rechenproblem 0.016666666666700000000000000000 * 60, Rechnet falsch
-
Montag, 10. Dezember 2012 16:24
Dim nTest1, nResult nTest1 = 0.016666666666700000000000000000 nResult = Test1 * 60 MsgBox(nTest1) MsgBox("Result: " &nResult) 'Result: 9,99999999999801E-03Hallo 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
- Typ geändert Robert BreitenhoferMicrosoft Contingent Staff, Moderator Freitag, 21. Dezember 2012 13:44 Keine Rückmeldung des Fragenstellender
- Typ geändert Robert BreitenhoferMicrosoft Contingent Staff, Moderator Freitag, 21. Dezember 2012 13:45 Keine Rückmeldung des Fragenstellender
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
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 SubOlaf Helper
Blog Xing -
Dienstag, 11. Dezember 2012 07:43Leider 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
- Bearbeitet Florian.Reiter Dienstag, 11. Dezember 2012 07:45
-
Dienstag, 11. Dezember 2012 10:35
-
Dienstag, 11. Dezember 2012 12:40Moderator
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:44Besitzer****************************************************************************************************************
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.

