Autor Beitrag
basik.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 07.01.09 18:05 
Also ich habe eine kleine Frage für euch:

Ich habe ein Programm gemacht, welches sich mit zeit beschäftigt, aber dies ist hier unwichtig.

In einem Stringrid werden Stunden mit enorm vielen nachkommazahlen dargestellt.
Allerdings kann so eine stunde ja nur 2 nachkommastellen haben, und die möchte ich nun haben.

Das Problem ist, wenn ich runde rechnet das Programm mit gerundeten Werten weiter und so ergeben sich falsche Werte...

Wie kann ich also im stringgrid die gerundeten Werte anzeigen und den pc mit ungerundeten rechnen?

Vielen Dank schonmal für eure Hilfe

Moderiert von user profile iconNarses: Titel erweitert.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 07.01.09 18:13 
Grundsätzlich trennt man normalerweise die Oberfläche von den Daten im Programm. Das heißt, dass du intern die Werte speicherst. Zum Beispiel in einem Array. Wenn es nicht beliebig viele Spalten wären sondern diese bestimmte Zwecke haben, dann kannst du ein Array mit Records benutzen und die Daten darin korrekt bezeichnet speichern.

Im StringGrid werden diese Werte dann nur angezeigt. Das heißt die genauen Werte kannst du jederzeit aus den dahinterliegenden Daten auslesen. Eingaben des Benutzers werden dementsprechend (ggf. nach Prüfung) in die Daten eingetragen.
Wenn der Benutzer gar nix ändern können soll, dann wäre eine ListView vermutlich die bessere Wahl. (Dort könnte ein Benutzer auch etwas ändern, aber das ist im StringGrid natürlich einfacher.)

So hast du jedenfalls jederzeit die Daten bereits als Zahlenwerte in dem Array vorliegen und kannst direkt damit rechnen (ohne Stringumwandlungen). Gleichzeitig missbrauchst du damit nicht die Anzeigekomponente für die Datenspeicherung.

Nebenbei würde ich die Stunden eher mit Minuten statt 2 Nachkommastellen darstellen, oder? ;-)
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: Mi 07.01.09 18:14 
Nutzt du das Stringgrid als Speicher deiner Werte?
Wenn ja, dann solltest Du stattdessen mit einem normalen Array arbeiten,
in welchem Du die laufenden Werte speicherst und verarbeitest.

Zur Anzeige greifst Du dann jeweils auf dieses Array zu und schreibst die
gerundeten Werte in das StringGrid.

(GRML und schon wieder einer schneller ^^)
basik.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 07.01.09 18:38 
Danke für eure schnellen antworten.

Der benutzer muss nichts ändern und ich habe als vorlage ein stringgrid zu machen :/
Und minuten würden auch nicht passen, da die stunden im 3 stelligen bereich liegen (tage passen auch nicht ;) )


user profile iconarj hat folgendes geschrieben Zum zitierten Posting springen:
Nutzt du das Stringgrid als Speicher deiner Werte?

Keine Ahnung! xD


Wie kann ich den stringgrid denn konkret gerundete werte anzeigen lassen?
lincore
Hält's aus hier
Beiträge: 15

Kubuntu 8.04, Debian lenny, Windows XP, Windows Vista
Delphi 2009, C++, Python, Lua
BeitragVerfasst: Mi 07.01.09 18:47 
Ganz konkret zum Beispiel mit Format aus SysUtils. Das erfordert natürlich, dass Du deine Daten nicht im StringGrid gespeichert hast oder die Zellen selbst zeichnest.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 07.01.09 18:48 
user profile iconbasik. hat folgendes geschrieben Zum zitierten Posting springen:
Der benutzer muss nichts ändern und ich habe als vorlage ein stringgrid zu machen :/
Dann lässt sich das nicht ändern, auch wenn es eben nicht schön aussieht. ;-)

user profile iconbasik. hat folgendes geschrieben Zum zitierten Posting springen:
Und minuten würden auch nicht passen, da die stunden im 3 stelligen bereich liegen (tage passen auch nicht ;) )
Ich meine statt 231,33333333333 Stunden bzw. gerundet 231,33 lieber 231:20 für 231 Stunden und 20 Minuten.

user profile iconbasik. hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich den stringgrid denn konkret gerundete werte anzeigen lassen?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
type
  TMeineDaten = record
    ErsteSpalte: String;
    Uhrzeit: Double;
  end;

DeinArrayMitDaten = array of TMeineDaten;

SetLength(DeinArrayMitDaten...

for i := 0 to High(DeinArrayMitDaten) do
begin
  Cells[i, 0] := DeinArrayMitDaten[i].ErsteSpalte;
  Cells[i, 1] := Format('%.2f Stunden', [DeinArrayMitDaten[i].Uhrzeit]);
end;
Konkrete Bezeichnungen statt ErsteSpalte usw. kann ich natürlich nicht angeben, was dabei was ist weißt ja nur du selbst.
basik.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 07.01.09 19:11 
Danke das ist eine gute idee soo werd ich das machen!