Step 7 Umwandeln DINT in 2 INT

eike

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich würde gerne einen DINT Wert in 2 INT aufteilen und habe dazu nichts finden können.
Diese sollen den DINT Wert in DEZ aufgeteilt auf 2 MW ausgeben.
Leider passiert folgendes:

In einer VAT:

DB31.DBD 64 DEZ L#9015400

Code:
L   DB31.DBW    64
T  MW6
L   DB31.DBW    66
T  MW8
In einer VAT sieht es dann so aus.

MW6 DEZ 137
MW8 DEZ -28568

Kann mir jemand helfen den Wert so umzurechnen, dass es so dargestellt werden kann?

MW6 DEZ 901
MW8 DEZ 5400

Vielen Dank im Voraus für Hilfe.
Pit
 
Dividiere durch 10000, den Quotient schreibe in das eine MW und den Divisionsrest in das andere MW.
/D und MOD sind Deine Freunde.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

coole Sache, funktioniert einwandfrei, Danke.
Jetzt würde ich nur gerne noch eines wissen, wieso durch 10000 dividiert wird?

Danke
Pit
 
Das "sieht" man doch! ;)
Ehrlich, so simple Mathematik mag ich eigentlich nicht erklären... Zahlenzerlegung und Ziffernabspaltungen sollten zum Grundwissen eines Programmierers gehören. :cool:
Letzte Ziffer abspalten = MOD 10
4 letzte Ziffern abspalten = MOD 10000

Harald
 
Das muss auch so sein. Wenn Du im Unterricht aufgepasst hast, weist Du, dass 9015400dez=899068hex sind.
Wenn Du nun die beiden Worte einzeln betrachtest, hast Du 89hex=137dez und 9068hex=-28568dez

Warum teilst Du nicht einfach durch 10000 und schiebst das Ergebnis in MW8 und errechnest dann den Wert für MW6?
Also MW8 laden mit 10000 multiplizieren und zwischenspeichern, den Ausgangswert laden, und Zwischenwert abziehen und Ergebnis in MW6 speichern.

Soll das tatsächlich irgendwo eingesetzt werden, musst Du checken, ob der Ausgangswert nicht größer als 327670000 ist, weil sonst der "Rest" nicht mehr in MW6 passt.
Und dann checkst Du noch, ob das auch alles für negative Ausgangswert funktioniert und wo hier die Grenze liegt.

-----------
Ja, MOD macht es leichter, daran hatte ich nicht gedacht
 
Zuviel Werbung?
-> Hier kostenlos registrieren
so simple Mathematik mag ich eigentlich nicht erklären...
Sorry, ich stand grade am Bahnsteig. Jetzt sitz ich beim ersten Bierchen und habe Muße für die Erklärung. :)

Bei Division von Dezimalzahlen durch eine Zehnerpotenz wird nur das Dezimalkomma nach links verschoben, um so viele Stellen wie der Divisor Nullen hat. Bei Ganzzahl-Division gehen dabei die Nachkommastellen verloren. (Übrig blieb Deine 901)

Bei modulo-Division durch eine Zehnerpotenz gehen alle Ziffern oberhalb der Nullen des Divisors verloren. Es bleiben nur die unteren Ziffern erhalten, so viele wie der Divisor Nullen hat. (übrig blieben Deine 5400)

Harald
 
Zurück
Oben