DBGrid zeigt falsche Zahlen an

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

DBGrid zeigt falsche Zahlen an

Beitrag von TT73GP7 »

Hallo zusammen,

ich habe gestern die neue Lazarus Version installiert.
Soweit alles super und läuft auch echt schön schnuffig.

Nur leider gibt Zeigt ein DBGrid falsche Zahlen an :(

z.B.
2059,72 wird zu 79999999989558
bei Zahlen die keine Kommastelle haben geht alles gut

Wenn ich nun das SQL nehme und in der Datenbank direkt ausführe, zeigt er alles richtig an.

hmm
da dachte ich mir gut nutze ich halt Displayformat (#####,##)

joar eigentlich super,
nur zeigt er aber keine nach Kommastellen mehr an

hmm wie bekomme ich denn diesen Fehler raus?

Viele Grüße
:)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGrid zeigt falsche Zahlen an

Beitrag von wp_xyz »

Wenn das DisplayFormat hier denselben Regeln folgt wie bei FormatFloat, dann ist auf jeden Fall der Dezimaltrenner falsch - das ist im FormatString immer ein Punkt, selbst wenn die Ländereinstellungen ein Komma wollen. Selbst wenn du das behoben hast, wird das immer noch nicht zur Zufriedenheit ausfallen: Das '#' steht für eine Ziffer, die entfällt, wenn sie 0 ist. Das heißt: die Zahl 0 wird als LeerString formatiert. Daher meine ich, dass der richtige FormatString ein '0' direkt for dem Dezimalpunkt enthalten sollte - denn diese Ziffer wird ausgegeben, auch wenn sie 0 ist - und wenn du zwei Dezimalstellen fest haben willst, auch zweimal 0 nach dem Dezimalpunkt, also '0.00'. Wenn die Zahl >= 10 ist, werden die zugehörigen Ziffern trotzdem ausgegeben, auch wenn hier kein Formatzeichen mehr steht.

Code: Alles auswählen

program Project1;
 
uses
  SysUtils;
begin
  WriteLn(FormatFloat('######,##', 2059.72));   // --> '2060'
  WriteLn(FormatFloat('######.##', 2059.72));   // --> '2059.72'
  WriteLn(FormatFloat('0.00', 2059.72));        // --> '2059.72'
 
  WriteLn(FormatFloat('######,##', 0));         // --> ''
  WriteLn(FormatFloat('######.##', 0));         // --> ''
  WriteLn(FormatFloat('0.00', 0));              // --> '0.00'
 
  WriteLn(FormatFloat('######,##', 0.0001));    // --> ''
  WriteLn(FormatFloat('######.##', 0.0001));    // --> ''
  WriteLn(FormatFloat('0.00', 0.0001));         // --> '0.00'
 
  ReadLn;
end

Antworten