PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Byte-Variable Berechnung fehlerhaft



demmy
24.12.2014, 13:16
Hi zusammen,
Frohe Weihnachten erst mal an alle!

Ich habe heute mal ein wenig Zeit ;) und grübele gerade an einem Problem.

Ich habe eine Single-Variable die ich auf 2 Stellen vor und nach dem Komma aufteilen möchte.
Das habe ich so versucht:



Dim Te As Single
Dim Rechenwert1 As Single
Dim Rechenwert2 As Word
Dim Vorkomma As Byte
Dim Nachkomma As Byte

Rechenwert1 = Te * 100 ' Komma um zwei Stellen nach rechts verschieben
Rechenwert1 = Round(rechenwert1) ' letzte Stelle runden
Rechenwert2 = Rechenwert1 ' Single-Variable in Word-Variable wandeln
Vorkomma = Rechenwert2 / 100
Nachkomma = Rechenwert2 Mod 100



Bis zu Rechenwert2 stimmen meine Ergebnisse. Nur danach, der Wert Vorkomma und der Wert Nachkomma, sind totaler Blödsinn.

Ich hätte gerne das die beiden Werte jeweils in einer Byte-variable stehen. Wo ist denn mein Denkfehler?

Viele Grüße

for_ro
24.12.2014, 14:08
Hallo demmy,
zwei Sachen: Einmal nimmst du zur Berechnung von Vorkomma die Variable Temperatur_rechenwert2, die vorher noch nicht gesetzt wurde.
Ist aber wahrscheinlich nur ein Übertragungsfehler und du meinst Rechenwert2.
Wichtiger ist aber, dass Vorkomma nur als Byte definiert ist. Bascom verwendet immer die Rechenmethode, die zur Ergebnisvariable gehört. Bedeutet, dass Bascom in diesem Fall mit Bytes rechnet. Rechenwert2 ist aber vom Typ Word.
Du kannst nur einen Typ in einen anderen umwandeln, wenn du ihn einfach zuweist, wie hier
Rechenwert2 = Rechenwert1
Beide haben unterschiedlichen Typ, aber die Zuweisung funktioniert. Ähnlich musst du das auch mit Rechenwert2 machen.

demmy
24.12.2014, 15:17
Hu Hu,

ja das war ein kleiner Kopierfehler. :D
Und vielen Dank, habe es jetzt so gemacht und jetzt funktioniert es! :)



Dim Te As Single
Dim Rechenwert1 As Single
Dim Rechenwert2 As Word
Dim Vorkomma_word as Word
dim Nachkomma_word as word
Dim Vorkomma As Byte
Dim Nachkomma As Byte

Rechenwert1 = Te * 100 ' Komma um zwei Stellen nach rechts verschieben
Rechenwert1 = Round(rechenwert1) ' letzte Stelle runden
Rechenwert2 = Rechenwert1 ' Single-Variable in Word-Variable wandeln
Vorkomma_word = Rechenwert2 / 100
Nachkomma_word = Rechenwert2 Mod 100
Vorkomma = Vorkomma_word
Nachkomma = Nachkomma_word


Aber geht das ganze nicht irgendwie ein wenig einfacher? Das scheint mir doch alles ein wenig viel zu sein für so eine "einfache" Rechenoperation.

Sky30
25.12.2014, 18:48
Aber geht das ganze nicht irgendwie ein wenig einfacher?



Hallo!

Schau dir doch bei Bascom einfach mal die Befehle FRAC (http://basavrhelp.mcselec.com/frac.htm?zoom_highlightsub=frac) und INT (http://basavrhelp.mcselec.com/int.htm) an! ;)


Angeneme Weihnachten noch,
Sky30 8)

Klebwax
25.12.2014, 19:04
Ohne jetzt BASCOM wirklich zu kennen:

Vorkomma = Te
Nachkomma = Te * 100 Mod 100

wenn Vorkomma und Nachkomma Ganzzahlvariablen sind.

MfG Klebwax