Das war QD
Außerdem bin ihc jemand der nur ab und zu aus Spaß sowas macht und dann immer offen ist, wenn er ERklärt bekommt was er falsch macht oder was man ordentlicher "sauberer" lösen kann.
Aber ich vermute das du auf
anspielst? Da so eh der Vergleich auf TRUE gemacht wird?
So grob funktioniert das jetzt sogar. Allerdings scheint meine Funktion, die mit den String mit Dezimalpunkt in ein Float umwandelt (hier im Forum gefunden) die Nachkommastellen abzuschneiden.
Oder Ich runde irgendwo wo ich es im Moment nicht sehe. Habe ich "glatte" Zahlen (ohne Nachkommastelle) bekomme ich das passende Ergebnis.
Habe ich, als Beispiel Nachkomma stellen (Der Intervall ist immer 100,1, also wäre es richtig)
dann bekomme ich gesagt das mein Ergenis -1 (also ungültig) ist
Zitat:
Targets :
0.000000 100.100000 200.200000 300.300000 400.400000
Meine Funktionen
MyStrToFloat() hier im Forum gefunden.
Code:
function MyStrToFloat(AString: string): double;
begin
AString := StringReplace(AString, '.', DecimalSeparator, [rfIgnoreCase, rfReplaceAll]);
AString := StringReplace(AString, ',', DecimalSeparator, [rfIgnoreCase, rfReplaceAll]);
result := StrToFloat(AString);
end;
Meine eigene Funktion:
In Targets übergebe ich das Stringarray mit den einzelnen Werten.
Rückgeliefert werden soll der Intervall
in Values.TargetCount ist die Anzahl der vorhandenen Targets.
Code:
function CalculateStep(Targets: array of string): double;
//Größe der Schrittweite, -1 wenn ungueltig
var
i, j: integer;
m, r: double;
l: boolean;
begin
i := 0;
j := 0;
r := 0;
l := False;
i := Values.TargetCount;
m := MyStrToFloat(Targets[1]) - MyStrToFloat(Targets[0]);
for j := 1 to i - 1 do
begin
if MyStrToFloat(Targets[j]) - MyStrToFloat(Targets[j - 1]) = m then
l := True
else
l := False;
end;
if l then
r := m
else
r := -1;
Form1.Edit1.Text := FloatToStr(m);
Form1.Edit2.Text := FloatToStr(r);
Form1.Memo1.Text := ArrayToStr(Targets);
end;