Ich habe den Code nur mal erweitert, damit man genauer sieht "wo" "was" geschieht.
Code: Alles auswählen
Debug "Convert floating point constant to b,w,l,q"
#TEST = 1.55
f.f = #TEST
b.b = #TEST
w.w = #TEST
l.l = #TEST
q.q = #TEST
Debug #TEST
Debug f
Debug b
Debug w
Debug l
Debug q
; RESULT is 1
Debug "Convert single floating point variable to b,w,l,q"
f = #TEST
b=f
w=f
l=f
q=f
Debug f
Debug b
Debug w
Debug l
Debug q
; RESULT is 2
Debug "Convert double floating point variable to b,w,l,q"
d.d = #TEST
f=d
b=d
w=d
l=d
q=d
Debug d
Debug f
Debug b
Debug w
Debug l
Debug q
; RESULT is 2
eine 100%ige Antwort kann ich dir auch nicht geben, aber folgendes, falls du es eh nicht schon weißt. Floats arbeiten ganz anders als andere Variablentypen, auch bitweise gesehen. Man kann zwar ein Float in einem Long speichern, aber nicht damit rechnen (einfach mit Poke kopieren). Außerdem sind Floats wie du ja weißt Decimalzahlen und diese kann ein ander Typ nicht aufnehmen. Es wird also umgewandelt und daher sind deine Abschnitte II un III richtig. Weshalb nun Abschnitt I anders ist, kann ich nicht ganau sagen, nur vermuten. Wie man sieht wird die Umwandlung in einen Float korrekt übernommen, in Bytes usw. "nicht". Aber ich vermute, das dies daran liegt, das #TEST KEIN FLOAT ist, sondern Konstanten. Und es kann und wird sein, das die änders behandelt werden. Ich "vermute" das konstanten ähniche einem "String" gespeichert werde, also eine andere "markierung" haben. Dadurch könnte es zu unterschieden kommen. eine Umwandlung eines "Zahlenstrings" in eine Zahl arbeitet unterschiedlich (str() und strf()).
Vermutlich wird zum Umwandeln von einer Konstante in einen FLoat die FPU (heißt doch glaube ich so) genutz und weil ein "Float" mit dabei ist dies als Dezimalzahl genommen. Bei anderen Arten wird vielleicht einfach davon ausgegangen Ziel ist "keine Decimalzahl" und dir FPU nicht genutzt und dann gleibt zum Umwandeln nur die möglichkeit den "Vorkommawert" durch "kopieren" zu übernehmen. Ist wie gesagt nur so ne Vermutung.
man könnte da sicher noch was intern ändern.
[edit]
habe mal ein bissl getest.
Ich habe int() und b2.b = Round(#TEST, 1) getestet.
bei round() im Modus 1 gibt es ne 2 Zurück. Das bedeutet dann wohl einfach, das Konstanten standartmäßig abgerundet werden. Fragt sich jetzt nur, ob das ein Versehen ist oder absichtlich so gemacht, weil Konstanten eher wie Strings behandelt werden.
t.s = "1.55"
Debug Val(t)
Debug ValF(t)
liefern auch unterschiedliche ergebnisse. Strings also werden bei der Umwandlung abgerundet, Konstanten auch.