![]() |
If not XY in [...] mit reellen Typen
Hallo DP,
ich muss einen Radius mit einer Werkzeugliste vergleichen. Wenn der "Radius" nicht in der Liste vorhanden ist, soll ein Fehler ausgegeben werden. Zur Zeit verwende ich diesen Code.
Delphi-Quellcode:
Der Code funktioniert, die Schreibweise gefällt mir jedoch nicht.
var
Radius : extended; . . . Radius := StrToFloat(Form1.StringGrid1.Cells[4, i]); if Radius <> 3.4 then if Radius <> 4.25 then if Radius <> 5.1 then if Radius <> 6 then if Radius <> 7 then if Radius <> 8.75 then if Radius <> 10.5 then if Radius <> 13.25 then if Radius <> 16 then begin Form1.StringGrid1.Cells[9, i] := 'ERROR'; end; Ich suche eher etwas wie
Delphi-Quellcode:
Habt ihr eine Idee wie der Code vereinfacht werden kann?
if not (Radius in [1,2,3]) then ...
|
Re: If not XY in [...] mit reellen Typen
Das ist "Case". -> OH
|
Re: If not XY in [...] mit reellen Typen
Zitat:
Was du (mal ganz spezifisch den fall betrachtet) tun könntest wäre folgendes: statt
Delphi-Quellcode:
dasda
Radius := StrToFloat(Form1.StringGrid1.Cells[4, i]);
if Radius <> 3.4 then if Radius <> 4.25 then if Radius <> 5.1 then if Radius <> 6 then if Radius <> 7 then if Radius <> 8.75 then if Radius <> 10.5 then if Radius <> 13.25 then if Radius <> 16 then begin Form1.StringGrid1.Cells[9, i] := 'ERROR'; end;
Delphi-Quellcode:
schreiben
Radius: integer;
Radius := round(StrToFloat(Form1.StringGrid1.Cells[4, i]) * 100); if not (Radius in [340, 425, 510, 600, 700, 875, 1050, 1325, 1600]) then Form1.StringGrid1.Cells[9, i] := 'ERROR'; Oder du schreibst dir eine Funktion:
Delphi-Quellcode:
function IsWertIn(Wert: extended; Werte: array of extended): boolean;
begin result := true; for i := 0 to high(Werte) do if Wert = Werte[i] then //vorsicht hier: extendeds vergleichen sollte man nicht, sondern mit einer abweichung von +/- 0.josef vergleichen exit; result := false; end; |
Re: If not XY in [...] mit reellen Typen
Zitat:
|
Re: If not XY in [...] mit reellen Typen
Delphi-Quellcode:
Das sieht gut aus...
Radius: integer;
Radius := round(StrToFloat(Form1.StringGrid1.Cells[4, i]) * 100); if not (Radius in [340, 425, 510, 600, 700, 875, 1050, 1325, 1600]) then Form1.StringGrid1.Cells[9, i] := 'ERROR'; Danke |
Re: If not XY in [...] mit reellen Typen
Zitat:
also wenn du +/-.adolf geschrieben hättest, würd ich mir ja sorgen um dich machen, Chimaira, aber so hab ich einfach null ahung, was du meinst.... |
Re: If not XY in [...] mit reellen Typen
wen ner aus österreich kommt hats ne bedeutung :)
sagt man so 0 komma josef ;) |
Re: If not XY in [...] mit reellen Typen
Er hätte auch +/- 0.x schreiben können. Hauptsache, du gibst ein bestimmtes Intervall an, in dem sich die Werte befinden müssen.
|
Re: If not XY in [...] mit reellen Typen
ah sehr schön. muss ich doch noch ne fremdsprache lernen. :lol:
|
Re: If not XY in [...] mit reellen Typen
abseits noch ne frage
ordinal und primitiv ist dasselbe oder? |
Re: If not XY in [...] mit reellen Typen
Wandelt die Typen in integer etc. um und fertig. 8)
|
Re: If not XY in [...] mit reellen Typen
Das mit dem 'if r in [...]' klappt nicht unbedingt, weil ein Set nur Bytes (0..255) enthalten kann, jedenfalls bei D6.
Ein 'Case' würde gehen, ist aber unschön. Bleibt noch die Funktion. Das finde ich am Elegantesten, weil man hier nicht nur auf Gleichheit abfragen kann (sollte man bei reelen Typen sowieso nicht, alter Hut). |
Re: If not XY in [...] mit reellen Typen
zu 0.Josef:
Da gibts die nette Funktion ![]() |
Re: If not XY in [...] mit reellen Typen
Zitat:
Eine Funktion wird wohl die einzige Möglichkeit bleiben. Jedoch bleibt noch das Problem mit dem Vergleichen. In meinem speziellen Fall sind keine +/- Abweichungen möglich. Das bedeutet das ein Wert von 10.4999999999999.... (10.5) herausgefiltert werden muss. |
Re: If not XY in [...] mit reellen Typen
Hast du meinen Post gesehen? Alternativ geht auch
![]() Versuch mal
Delphi-Quellcode:
uses Math; if IsZero(15-14.999999999999999999999) then showmessage('Hallo Welt'); |
Re: If not XY in [...] mit reellen Typen
Ja, zu spät...
Mit "IsZero" kann man eine Funktion bauen. Hab ich gerade schon ausprobiert. Super! |
Re: If not XY in [...] mit reellen Typen
So, für alle die auch eine Funktion zum Vergleichen einer Reellen Zahl mit einer Werte-Liste benötigen; hier die Lösung...
Delphi-Quellcode:
Mit "Tol" kann eine Toleranz angegeben werden, innerhalb sich der Wert befinden darf.
function IfFloatIn(w : extended; a : array of extended; Tol: extended): boolean;
var i : integer; begin result := true; for i := 0 to high(a) do if SameValue(w, a[i], Tol) then exit; result := false; end; procedure TForm1.BitBtn1Click(Sender: TObject); var Radius : extended; begin Radius := StrToFloat(Edit1.Text); if IfFloatIn(Radius,[10.5, 11.7, 17.8],0) then Label1.Caption := 'true' else Label1.Caption := 'false'; end; Danke an alle, die sich an diesem Tread beteiligt haben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 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