| |
Visual-Basic EinsteigerZahlen in Vbasic6 | | | Autor: Maeiyr | Datum: 11.05.20 14:10 |
| Hallo, ich habe folgendes Problem, ich musste nach langer Zeit VB6 neu auf einem Rechner installieren.
Läuft alles super, aber intern werden Zahlen nur Integer gerechnet. Kann Variablen integer, double etc. alles festlegen, alles ok, kein Problem.
Bei einer Berechnung zB. der Width-Funktion eines Shapes kommt bei >32768 Error 6, zB. 8*4500/1310. Wo kann ich die interne Berechnugnauf Double umstellen? | |
Re: Zahlen in Vbasic6 | | | Autor: Souffleurlos | Datum: 11.05.20 16:46 |
| Hallo,
Shape ist ein Objekt. Du kannst den Datentyp einer Eigenschaft des Objekts nicht ändern. | |
Re: Zahlen in Vbasic6 | | | Autor: Manfred X | Datum: 11.05.20 16:56 |
| Hallo!
Du könntest im Code eine Konvertierungsfunktion für Zahlen und einen
passenden Zieltyp für das Ergebnis einzusetzen.
(Auch Zwischenergebnisse können einen Überlauf im Ziel erzeugen.)
https://www.vbarchiv.net/commands/cmd_cdbl.html
Bei der Zuweisung des Berechnungsergebnisses z.B. auf die "Width"-Eigenschaft
solltest Du ebenfalls eine geeignete explizite Konvertierung auf den
Zieltyp vornehmen. | |
Re: Zahlen in Vbasic6 | | | Autor: Kuno60 | Datum: 11.05.20 20:34 |
| Hallo,
der Integer-Bereich bei VB6 geht nur bis 32767.
Bei dieser Rechnung 8*4500/1310 kommt es schon bei 8*4500=36000 zu einem Überlauf.
Konstante ganze Zahlen sind immer vom Typ Integer, aber du kannst auch ein anderen Typ durch ein Typkennzeichen angeben.
# kennzeichnet eine Zahl als Double.
Also 8# * 4500# / 1310# wird komplett als Double berechnet und löst keinen Fehler aus.
Siehe: https://www.vbarchiv.net/commands/cmd_datentypen.html
(Übrigens bei NET, wurden die Typkennzeichen beibehalten.) | |
Re: Zahlen in Vbasic6 | | | Autor: markusxy | Datum: 11.05.20 22:58 |
| @Kuno60
8 * (4500 / 1310)
Kannst du erklären, warum es so funktioniert?
Wenn ja, dann verstehst du das Problem möglicherweise. | |
Re: Zahlen in Vbasic6 | | | Autor: Maeiyr | Datum: 12.05.20 06:34 |
| Klar verstehe ich das, durch die Klammerrechnung wird die 32er Grenze nicht gerissen, was ich nicht begreife, wieso VB auf einmal intern nur noch Integer rechnet und nicht mehr double. Denn ich glaube mich zu erinnern, 8*4500/1310 konnte ich auch ohne Klammern oder extraKennung # im Direktfenster berechnen.
Vielen Dank an alle die was geschrieben haben. | |
Re: Zahlen in Vbasic6 | | | Autor: Manfred X | Datum: 12.05.20 07:47 |
| Wenn VBB6 intern mit Integern rechnen würde, käme bei
der Division ein falsches Ergebnis. Es geht um den Datentyp. | |
Re: Zahlen in Vbasic6 | | | Autor: Kuno60 | Datum: 13.05.20 22:04 |
| Hallo markusxy,
bei 8 * (4500 / 1310) tritt natürlich kein Überlauf auf und das Ergebnis ist dasselbe. Außerdem wird in diesem Fall mit Double gerechnet.
Eine Division von 2 Interger-Zahlen liefert das Ergebnis als Double, es sei denn man verwendet \.
Auch Folgeoperationen werden mit Double gerechnet.
Bei 8000000 * (4500 / 1310), tritt kein Überlauf auf.
Gebrochene Zahlen (123456.789) ohne Typkennzeichen, sind immer Double. | |
Re: Zahlen in Vbasic6 | | | Autor: markusxy | Datum: 14.05.20 20:45 |
| Da beide Operationen gleichrangig sind, wird bei VBA/VB6 von links nach rechts abgearbeitet.
Die Zahl 8 und 4500 werden als 2 Byte Integer Werte gespeichert und es wird eine 2 Byte Integer Multiplikation durchgeführt.
Da kommt es dann zum Überlauf.
Wäre kein Überlauf da, würde danach das Ergebnis in Double konvertiert und mit dem zweiten Wert dividiert.
Die Division ist wie schon aufgezeigt immer eine Gleitkomma Berechnung, außer man verwendet eine Integer Division.
Das zentrale beim Rechnen, ist das immer beide Zahlen vom selben Datentyp sein müssen.
Wenn du also eine Zahl mit dem Long Typkennzeichen versiehst, dann gibt es kein Problem, weil auch die zweite Zahl automatisch konvertiert wird (wobei sich real nichts verändert), aber der Compiler führt eine 4Byte Integer Multiplikation durch.
z.B. 4& * 4500 / irgendwas.
Ich hoffe, das klärt dich Sache und nein, dass ist nichts VBA/VB6 spezifisches, sondern ist beim Großteil der Programmier-Sprachen so. | |
Re: Zahlen in Vbasic6 | | | Autor: markusxy | Datum: 14.05.20 20:52 |
| Schön erklärt.
Ich war nur von deiner Aussage:
Zitat: | | Konstante ganze Zahlen sind immer vom Typ Integer | |
irritiert.
Da war aber nur etwas unglücklich formuliert. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|