Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1340to1344
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Was übersehe ich bei Single-Values?

Was übersehe ich bei Single-Values?
23.12.2013 03:07:16
Johann
Hallo,
ich hab mir nun eine Stunde um die Ohren geschlagen einen Cent zu finden und mein Problem laesst sich auf diese Rechnung verdichten:
Excel VBA rundet bei einem SINGLE, obowhl ich noch weit vom Fassungsvermögen eines Single-Wertes weg bin:
Wenn man in den VBA-Direktbereich diesen Befehl eingibt:
?csng( -392058.99 ) * csng( -1 )
hätte ich als Ergebnis erwartet: 392058,99
Aber es kommt als Ergebnis 392059 !?!
Ein Single-Value kann doch bis 38 Nachkomma-Stellen.
Kann mir jemand erklären warum hier gerundet wird?
Vielen Dank im Voraus und liebe Grüße aus Wien

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
nimm doch Double
23.12.2013 07:42:38
Matthias
Hallo
Kann mir jemand erklären warum hier gerundet wird?
Eine Erklärung hab ich zwar auch nicht, aber ...
Den Cent wirst Du finden bei:
?cdbl( -392058.99 ) * cdbl( -1 ) (nur um bei Deiner Schreibweise zu bleiben)
obwohl cdbl( -1 ) oder auch csng( -1 ) für mich eh keinen Sinn ergibt)
Kannst ja auch gleich so schreiben:
?-392058.99 *-1
Erg: 392058,99
Warum muß es denn Single sein,
fehlen Dir die jeweils 4 Bytes wenn Du Double benutzt?

Sub Johann()
Dim Wert1 As Double
Dim Wert2 As Double
Dim ERG
Wert1 = -392058.99
Wert2 = -1
ERG = Wert1 * Wert2
Debug.Print ERG
End Sub
Ergebnis: 392058,99
oder gleich so:
Debug.Print VBA.Abs(-392058.99)
Gruß Matthias

Anzeige
AW: nimm doch Double
26.12.2013 11:04:18
Johann
Hallo Matthias,
Kannst ja auch gleich so schreiben:
?-392058.99 *-1
Erg: 392058,99

In meinem echten Makro ist es eine Single-Variable welche ich in einer Schleife mit -1 multipliziert habe.
Am Ende stimmten dann aber die Summen nicht mehr, weil Excel bei der Umwandlung mit CSNG(WertInVariant) einfach gerundet hatte. Das Beispiel welches ich hier ins Forum gestellt habe, zeigt nur ganz deutlich, dass die Zahlenverfälschung stattfindet, welche für mich unerklärlich ist.
Danke für den Hinweis auf Double, aber mein wirkliches Problem ist, dass ich es nicht verstehe, warum gerundet wird. Denn wenn ich Problem umgehe, dessen Herkunft mir nicht bekannt ist, dann kann ich bei meinem nächsten Makro wieder über einen gleichen Fallstrick stolpern....
Daher würde mich noch immer eine Erklärung interessieren, warum die Funktion CSng() rundet, obwohl der Wert noch seeehr weit weg vom Fassungsvermögen eines Single-Values ist
Vielen Dank und liebe Grüße

Anzeige
AW: nimm doch Double
26.12.2013 12:18:03
Matthias
Hallo
was erwartest z.B. Du bei 10/3
Es muss doch gerundet werden, oder welches "genaue Ergebnis" erwartest Du hier?
Das hängt alles mit der Umwandlung in Binärzahlen
und die Rückumwandlung in den entspr. DatenTyp zusammen.
Dazu gibt es aber schon sehr viele Beiträge im Archiv.
Diese Suche kann ich Dir nunmal leider nicht abnehmen.
schö.RstFT ...
Gruß Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige