![]() |
Delphi-Version: 10.3 Rio
Case-Statement für Float-Werte
Hallo,
ich habe gerade ein simples Case-Statement mit Single-Werten geschrieben. Leider kann ich es nicht kompilieren. Die Meldung lautet: Zitat:
So habe ich es versucht:
Delphi-Quellcode:
TibZoomFactorPercent = (
Custom, Percent10, Percent25, Percent50, Percent75, Percent100, Percent125, Percent150, Percent175, Percent200, Percent250, Percent300, Percent400, Percent500 ); function TfrmEditor.GetZoomFactorAsPercent( AZoomFactor: Single = 1): TibZoomFactorPercent; begin Result := TibZoomFactorPercent.Custom; case AZoomFactor of // Hier tritt der Fehler auf... 0.10: Result := TibZoomFactorPercent.Percent10; 0.25: Result := TibZoomFactorPercent.Percent25; 0.50: Result := TibZoomFactorPercent.Percent50; 0.75: Result := TibZoomFactorPercent.Percent75; 1: Result := TibZoomFactorPercent.Percent100; 1.25: Result := TibZoomFactorPercent.Percent125; 1.50: Result := TibZoomFactorPercent.Percent150; 1.75: Result := TibZoomFactorPercent.Percent175; 2: Result := TibZoomFactorPercent.Percent200; 2.50: Result := TibZoomFactorPercent.Percent250; 3: Result := TibZoomFactorPercent.Percent300; 4: Result := TibZoomFactorPercent.Percent400; 5: Result := TibZoomFactorPercent.Percent500; end; end; |
AW: Case-Statement für Float-Werte
Was spricht dagegen das du nur mit ganzen Prozentwerten arbeitest.
Damit hast du einen Integer und kannst wieder mit case-Statement arbeiten. |
AW: Case-Statement für Float-Werte
Moin...:P
Zitat:
|
AW: Case-Statement für Float-Werte
Zitat:
Gleitkommazahlen sind nun mal mathematisch keine Ordinalen. Sherlock |
AW: Case-Statement für Float-Werte
Dazu lässt sich 0.10 auch gar nicht exakt als Single darstellen.
|
AW: Case-Statement für Float-Werte
Zitat:
|
AW: Case-Statement für Float-Werte
Entweder
Delphi-Quellcode:
oder
Round(AZoomFactor * 100)
mehrere if´s in dieser Form:
Delphi-Quellcode:
Im Grunde ist die zweite Variante noch übersichtlicher.
function TfrmEditor.GetZoomFactorAsPercent(
AZoomFactor: Single = 1): TibZoomFactorPercent; begin Result := TibZoomFactorPercent.Custom; if (AZoomFactor = 0.10) then Exit(TibZoomFactorPercent.Percent10); if (AZoomFactor = 0.25) then Exit(TibZoomFactorPercent.Percent25); ... end; Sie ist etwas aufwendiger zu tippen, aber das ist ja ein einmaliger Aufwand. Man ist auch etwas freier in der Ausgestaltung. Zu beachten ist, dass Floatwerte immer Ungenauigkeiten beinhalten können. Deshalb sollte man ggf. eine Funktion wie SameValue zum Vergleich verwenden. |
AW: Case-Statement für Float-Werte
|
AW: Case-Statement für Float-Werte
Danke für eure vielen Antworten. Das ich mit ganzen Prozenten oder mit If-Abfragen das Problem lösen kann war mir von Anfang an klar. Ich wollte nur wissen warum es nicht möglich ist Float-Werte in einem Case-Statement zu verwenden. Ebenso Strings. Liegt das "nur" am Daten-Typ oder wurde es einfach nicht im Compiler implementiert? Ich hatte mal einen PreCompiler (ich glaube es war IDE Fix Pack oder so ähnlich) mit dem man u. a. Strings in Case verwenden konnte. Das war vor über 10 Jahren... Warum baut Embarcadero sowas nicht mal ein? Floats, Strings, etc. Ich finde das wäre ein tolles Feature...
|
AW: Case-Statement für Float-Werte
Ja, ich fände das auch gut.
Es würde sich ja lediglich um eine andere Schreibweise von if-Statements handeln. Der Compiler könnte quasi identischen Maschinencode wie bei if-Statements erzeugen. Schwieriger wäre sicherlich, das auch dem Debugger beizubringen. Wie hoch der Aufwand letztlich in Summe wäre, kann ich nicht wirklich beurteilen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz