Einzelnen Beitrag anzeigen

Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Matheparser: Schleifenproblem bei Kommata

  Alt 30. Jul 2007, 09:48
Hi,

mein kleiner Matheparser macht mir beim Komma Ärger: Bei der Rechnung 1,5*2.3 verwandelt er
1
,
5
zu zu 1,5. Allerdings geschieht dies nicht bei 2.3. Warum ? Mir ist nur aufgefallen, dass ich die Arraygröße verändere und die Schleife deshalb vlt. schon früher zu Ende ist, aber falls das überhaupt Auswirkungen hat, wie könnte man dann das Problem lösen ?

Delphi-Quellcode:
function Split(s : String) : TDynTokArray; // Ein Array für die Klasse TToken, spielt allerdings keine großartige Rolle hierbei; Split teilt, wie der Name schon sagt, alles in Tokens auf. Dennoch muss eine Kommazahl in einem Eintrag statt in 3 Einträgen stehen.
begin
  ...
  for i := 0 to High(Result) do
  begin
    if (Result[i].Val = ',') or (Result[i].Val = '.') then // der Punkt wird hier abgefragt, also ist hier nicht die Fehlerquelle
    begin
      Result[i-1].Val := Result[i-1].Val + Result[i].Val + Result[i+1].Val; // Zusammensetzen
      for j := i to High(Result) do // der Rest im Array verschoben werden
        Result[j] := Result[j+1];
      SetLength(Result, High(Result)); // der unnötige Rest, welcher sogar noch Fehler verursachen würde, wird gelöscht
    end;
  end;
  ...
end;
  Mit Zitat antworten Zitat