Hallo!
Das geht leider nicht. Bei Case sind nur ganzzahlige Werte erlaubt.
Es muß so programmiert werden:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if (a>=1.2) and (a<=3.5) then begin ... end else if (a>=7.4) and (a<=50.23) then begin ... end; |
Noch ein Hinweis: Real-Typen vergleicht man möglichst nicht mit '='! Grund dafür ist, daß Real intern in Exponentendarstellung gespeichert werden. Dadurch können die Zahlen sehr groß werden, aber die Zahl der gültigen Stellen ist begrenzt.
Stark vereinfacht auf dezimale Zahlen übertragen:
Es werden 3 Ziffern und die Position des Kommas gespeichert. Möglich ist:
0,000000000000123
123
12300000000000000
aber:
123900 ist nicht darstellbar und wird als 123000 gespeichert.
Alte Programmiereregel: vor dem Addieren einer Folge von Real-Zahlen sortieren und von unten nach oben addieren!
Zähle im obigen Zahlenbeistiel zu 999 1000 mal die 1 zu - Ergebnis:
1: 999+1=1000
2: 1000 + 1 = 100
0, weil nur 3 Ziffern bearbeitet werden!
Ergebnis: 1000
alternativ:
1000*1=1000
999+1000=1990 - kommt dem Ergebnis schon näher!
Wenn es vom Zahlenbereich hinkommt, sollte man Festkoma-Zahlen nehmen. Wer hindert mich z.B. daran, einen Int64 grundsätzlich als mit 4 Nachkommastellen versehen zu betrachten - nur eine Frage der Formatierung bei der Ausgabe!
Gruß
Dietmar Brüggendiek