![]() |
AW: Stringgrid Plus Minus Vergleich
Zum Glück oder blöder Weise, paßt sich die interne StringList des StringGrids automatisch an und vergrößert sich (auch wenn in der Anzeige nicht mehr Zeilen/Spalten angezeigt werden)
Beim StringGrid gibt es eine Trennung zwischen GUI und Daten :angle: |
AW: Stringgrid Plus Minus Vergleich
Zitat:
Delphi-Quellcode:
Hier muß der Fehler sein. Und das begreife ich nicht. Er beendet die Summierung bei der vorletzten Zeile.
Summe := Summe + StrToInt(JvSG1.Cells[9,i]);
JvSG1.Cells[10,i] := IntToStr(Summe); Gruß FL63 |
AW: Stringgrid Plus Minus Vergleich
Zitat:
|
AW: Stringgrid Plus Minus Vergleich
Zitat:
Delphi-Quellcode:
JvSG1.Cells[9,i+1]
und hier in der Anzeige nicht.
Delphi-Quellcode:
StrToInt(JvSG1.Cells[9,i]);
Gruss alfold |
AW: Stringgrid Plus Minus Vergleich
Zitat:
Um diesen HickHack zu entgehen habe ich ja die Summierung in eine andere Prozedur geschrieben. Aber damit summiert ja nichts! |
AW: Stringgrid Plus Minus Vergleich
Zitat:
Gruss |
AW: Stringgrid Plus Minus Vergleich
Mir ist noch was aufgefallen, was direkt nichts direkt mit dem Problem zu tun hat aber evtl. später für Verwirrung sorgen kann:
Delphi-Quellcode:
Flieskommazahlen (außer Currency) sollte man möglichst nicht auf "gleich" testen, da u.U. mathematisch gleiche Zahlen aufgrund Abbildungsungenauigkeiten in der Fließkommazahl plötzlich ungleich werden.
k:= StrToFloat(JvSG1.Cells[2,i]); l:= StrToFloat(JvSG1.Cells[2,i+1]);
If k > l then JvSG1.Cells[9,i+1] := '-1'; If k < l then JvSG1.Cells[9,i+1] := '+1'; If k = l then JvSG1.Cells[9,i+1] := '0'; Statt nun kompliziert zu runden (was auch nie genau wird) könnte man die Quelle vor der Umwandlung testen:
Delphi-Quellcode:
PS: Man könnte meinen, dass gleiche Strings immer gleich umgewandelt werden sollten. Meine mich aber zu erinnern, das Intel-CPUs da einen Mechanismus haben, Ungenauigkeiten durch wechselndes auf/abrunden auszugleichen (hoffe, das hab' ich nicht falsch in Erinnerung).
if JvSG1.Cells[2,i] = JvSG1.Cells[2,i+1] then
JvSG1.Cells[9,i+1] := '0' else // größer / kleiner prüfen |
AW: Stringgrid Plus Minus Vergleich
Nicht nur Intel auch AMD und Co.
![]() Denn durch die zweierkomplementäre Speicherung ist immer ein Bereich größer/kleiner, als der Andere, was zu Ungerechtigkeiten führt. Rundet man immer die 0.5 auf, dann wäre
Delphi-Quellcode:
immer kleiner, als
x.0 <= ... < x.5
Delphi-Quellcode:
.
x.5 <= ... < x+1.0
Also wird immer abwechselnd gerundet > bei ungeraden Ganzzahlanteilen in die eine Richtung und bei geraden Ganzzahlanteilen in die Andere. |
AW: Stringgrid Plus Minus Vergleich
Nachdem ich das Ganze in ein eigenständiges Projekt verpflanzt habe, alle Indizes angeglichen habe kommt folgendes bei raus:
Delphi-Quellcode:
Jetzt funktioniert es fehlerfrei von der ersten bis zur letzten Zeile.
implementation
{$R *.dfm} procedure TForm1.OffnenClick(Sender: TObject); begin JvSG1.LoadFromCsv('epatest.txt',#9); JvSG1.InsertCol(4) ; end; //---------------------Berechnung Plus Minus --------------------- procedure TForm1.PlusMinus(Sender: TObject); var i,Summe :integer; k,l:Real; begin Summe := 100; JvSG1.InsertCol(5); JvSG1.Cells[4,1] := '00'; begin For i:= 1 to (JvSG1.RowCount-1)-1 do //Plus Minus in die Zeile 4 Einfügen begin k:= StrToFloat(JvSG1.Cells[2,i]); l:= StrToFloat(JvSG1.Cells[2,i+1]); If k > l then JvSG1.Cells[4,i+1] := '-1'; If k < l then JvSG1.Cells[4,i+1] := '+1'; If k = l then JvSG1.Cells[4,i+1] := '0'; end; end; // Plus Minus Einfügen beendet end; procedure TForm1.BerechneSummenspaltePlusMinus(Sender:TObject); var i,Summe :integer; begin //JvSG1.InsertCol(10); Summe := 100; JvSG1.Cells[5,1] := '100'; For i:= 1 to JvSG1.RowCount-1 do begin Summe := Summe + StrToInt(JvSG1.Cells[4,i]); JvSG1.Cells[5,i] := IntToStr(Summe); end; end; procedure TForm1.BerechneClick(Sender: TObject); begin PlusMinus(Sender) ; berechneSummenSpaltePlusMinus(Sender); end; end. Vielen Dank bei allen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 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