Helle hat geschrieben:Ich hätte mich so rausgeredet: In der Hilfe steht nur für Ausdruck1, daß er Float sein kann (für Select), für Case heißt das Argument nur Ausdruck

.
Sooo genau hatte ich das gar nicht gelesen, danke für den Hinweis.
Im folgenden Test wird allerdings das "Uups!" angezeigt, danach zu urteilen wird also der Ausdruck nach Case auch auf ganze Zahlen gerundet:
Code: Alles auswählen
EnableExplicit
Define.l p
Define.f q
p = 3
q = 3.2
Select p
Case q
Debug "Uups!"
EndSelect
Helle hat geschrieben:Habe mir mal den ASM-Output angesehen: Ausdruck1 wird ordentlich in Integer umgewandelt, Ausdruck (!) ebenso beim Einzelwert (also nur q). Bei q-0.01 berechnet PB diesen Ausdruck auch noch richtig, kommt aber dann ins Schleudern und will mit einem x86-Befehl (CMP) auf den x87-Stack (ST0) zugreifen.
Jetzt verstehe ich wenigstens was da passiert, vielen Dank!
Helle hat geschrieben:Entweder fehlen hier einige nötige Schritte (wäre Bug von PB) oder PB sagt. nö, für Case <Ausdruck> bitte nur Integer. Dann wäre vielleicht eine Typ-Überprüfung nicht schlecht.
Unterm Strich stellt sich die Situation für mich aus Benutzersicht so dar:
Dass PB nach Select und Case nur Integer-Ausdrücke verarbeitet ist für mich, ähm ... verblüffend. Ich denke viele Benutzer rechnen kaum damit, und man kann ja auch nicht die ganze Hilfe im Kopf haben. Fließkommawerte stillschweigend zu runden halte ich für keine gute Idee. Das kann zu versteckten Bugs führen, die sind viel schlimmer (weil schwerer zu finden) als offensichtliche Bugs.
Wenn denn schon keine Fließkomma-Ausdrücke akzeptiert werden, sollte m.E. in jedem Fall eine klare Fehlermeldung ausgegeben werden wie etwa:
Code: Alles auswählen
Fehler in Zeile 27: Nach Select kann nur ein Integer-Ausdruck stehen.
Gruß, Little John