Nachkommastellen anzeigen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Anfänger33
Beiträge: 20
Registriert: Sa 15. Feb 2025, 13:33

Nachkommastellen anzeigen

Beitrag von Anfänger33 »

Habe eine kleine Datenbank erstellt (mariadb, zeos V8).
artnr INT
bezeichnung VCHAR (20)
vkpreis Decimal(8,4)

01,"Arikel 1"; "10,68"
02,"Arikel 2"; "3,16"

Berechnet werden soll der neue Verkaufspreis: vkpreis=vkpreis*1,045
Im ZQuery ist unter SQL folgendes eingetragen:

SELECT artnr, bezeichnung,
vkpreis AS preis_alt,
ROUND(vkpreis * 1.045,2) AS preis_neu
FROM wawi.artikel;

Angezeigt wird im DBGrid unter
artnr preis_alt preis_neu
Arikel 1 10,68 11,16
Arikel 2 3,16 3,3

Ich möchte aber das für Artikel 2 der Preis 3,30 angezeigt wird.
Im DBGrid kann ich nichts einstellen.

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Nachkommastellen anzeigen

Beitrag von theo »

Anfänger33 hat geschrieben: Sa 12. Apr 2025, 14:18 Im DBGrid kann ich nichts einstellen.
Bin kein Spezialist, aber ich denke doch, dass du das kannst.
Du musst nur Columns hinzufügen, dann kannst du dort "DisplayFormat" angeben pro Spalte.

https://lazarus-ccr.sourceforge.io/docs ... ormat.html
https://www.freepascal.org/docs-html/rt ... ormat.html

Anfänger33
Beiträge: 20
Registriert: Sa 15. Feb 2025, 13:33

Re: Nachkommastellen anzeigen

Beitrag von Anfänger33 »

Danke das schon mal recht hilfreich.

Leider klappt das nicht, wenn ich die Spalten über die SQL-Anweisung auswähle. In diesem Modus steht kein "DisplayFormat" zur Auswahl.

Manuell die Spalten auswählen klappt die Formatierung "0.00" eingeben ohne Gänsefüßchen.

Benutzeravatar
Bullykiffer
Beiträge: 17
Registriert: Fr 9. Aug 2024, 19:44
OS, Lazarus, FPC: Windows 10 (L 3.4.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit
Wohnort: Nordvorpommern

Re: Nachkommastellen anzeigen

Beitrag von Bullykiffer »

Moin. Ich bin jetzt nicht der Experte,ich arbeite auch mehr oder weniger schlecht mit SQLite und PostgreSQL,aber vielleicht ist dies hier für Dich eine alternative:

FORMAT(vkpreis * 1.045, 2) AS preis_neu

Der Nachteil in dieser jetzigen Form wäre,das es eine Stringausgabe wäre. Wenn es nur ein Wert ist,der irgendwo "nur" angezeigt werden soll,
dann ist das vermutlich kein Problem,wenn der Wert noch für weitere Berechnungen genutzt werden soll,dann müsste man dort etwas dran machen.

Wie gesagt,ich nutze kein MariaDB,aber probier doch einfach mal aus ob es so funktioniert ;)

Cya Bully

Anfänger33
Beiträge: 20
Registriert: Sa 15. Feb 2025, 13:33

Re: Nachkommastellen anzeigen

Beitrag von Anfänger33 »

Danke für den Hinweis.

In der SQL-Anweisung steht:
SELECT artnr, bezeichnung,
vkpreis AS preis_alt,
ROUND(vkpreis * 1.045,2) AS preis_neu
FROM wawi.artikel;

Gerundet und auf 2 Nachkommastellen wird das ganze ja gemacht. Nur die Anzeige in der Tabelle klappt nicht, wenn die 2.Nachkommastelle eine 0 ist. Das sieht unschön aus.

Problem ist weiter, das bei einem Preis von 8,00 nur 8 angezeigt wird. Die Spalte ist als Decimal (8,4) definiert.

paweld
Beiträge: 85
Registriert: So 11. Jun 2023, 16:01
OS, Lazarus, FPC: Lazarus trunk, FPC fixes

Re: Nachkommastellen anzeigen

Beitrag von paweld »

Ich empfehle nicht, die Funktion „Format“ in der Abfrage zu verwenden, da dann Text anstelle von Zahlen angezeigt wird.
Verwenden Sie die Eigenschaft „DisplayFormat“, wie @theo schrieb

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  DataSource1.DataSet := ZQuery1;
  DBGrid1.DataSource := DataSource1;
  ZQuery1.SQL.Text := 'SELECT artnr, bezeichnung, vkpreis AS preis_alt, ROUND(vkpreis * 1.045,2) AS preis_neu FROM wawi.artikel';
  ZQuery1.Open;
  for i := 0 to DBGrid1.Columns.Count - 1 do
  begin
    if (DBGrid1.Columns[i].FieldName = 'preis_alt') or (DBGrid1.Columns[i].FieldName = 'preis_neu') then
      DBGrid1.Columns[i].DisplayFormat := '0.00';
  end;
end;
Grüße / Pozdrawiam
paweld

Benutzeravatar
Bullykiffer
Beiträge: 17
Registriert: Fr 9. Aug 2024, 19:44
OS, Lazarus, FPC: Windows 10 (L 3.4.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit
Wohnort: Nordvorpommern

Re: Nachkommastellen anzeigen

Beitrag von Bullykiffer »

Hallo pawld

Code: Alles auswählen

for i := 0 to DBGrid1.Columns.Count - 1 do
  begin
    if (DBGrid1.Columns[i].FieldName = 'preis_alt') or (DBGrid1.Columns[i].FieldName = 'preis_neu') then
      DBGrid1.Columns[i].DisplayFormat := '0.00';
  end;
So geht es natürlich auch ;) Ich hab noch nie mit DBGrid gearbeitet,aber wenn ich mich jetzt auf z.B FORMAT() bei SQL abfragen beziehe,
dann kann es dort z.B. zu ganz bösen überraschungen kommen,wenn man die Formatausgabe mit '0.00' angibt. Ich weiß jetzt nicht wie DBGrid damit so umgeht,
bei der SQL Abfrage hat es mir damals die Zahlenstellen abgeschnitten,wenn der Wert z.B 22 oder 4444 gewesen wäre. Dann hätte die Abfrage eiskalt 2.00 oder 4.00
ausgegeben.Oder war es dann #.## ??? Ich weiß es nicht mehr. Aber das ist schon recht lange her,vielleicht hat sich in diese Richtung ja etwas geändert.

Bei PostgreSQL hab ich das dann mit FM99990.00 gelöst. Einstellige Werte (0) wurden immer angezeigt,auch wenn der wert z.B.: 0.05 war,und durch
die 9 war sichergestellt,das wenn ich größere Werte als einstellig habe,dann der Wert nicht unterschlagen wurde. Das verhinderte dann so Ausgaben wie
00000.05 -> 0.05 ;)

Cya de Bully

paweld
Beiträge: 85
Registriert: So 11. Jun 2023, 16:01
OS, Lazarus, FPC: Lazarus trunk, FPC fixes

Re: Nachkommastellen anzeigen

Beitrag von paweld »

bei der Formatierung bedeutet eine ‚0‘, dass hier immer eine Ziffer stehen sollte, und ein ‚#‘ bedeutet, dass hier eine Ziffer stehen kann oder nicht, wenn es sich um eine endgültige oder anfängliche 0 handelt.
zum Beispiel:

Code: Alles auswählen

   Zahl   |   Format   |   Ergebnis   
--------------------------------------
    1,234 |       0.00 |         1,23 
   11,456 |       0.00 |        11,46 
       35 |       0.00 |        35,00 
    1,234 |       0.## |         1,23 
   11,456 |       0.## |        11,46 
       35 |       0.## |           35 
     12,1 |     000.00 |       012,10 
     12,1 |     ##0.## |         12,1 
Grüße / Pozdrawiam
paweld

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Nachkommastellen anzeigen

Beitrag von Mathias »

Wen ich so in der schnelle etwas formatieren will, mache ich es so:

Code: Alles auswählen

var
  f: single = 123.456;
  s: string;
begin
  WriteStr(s, 'Es ist ', f: 6: 2, 'm gefahren.');
  Caption := s;
end;    
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Anfänger33
Beiträge: 20
Registriert: Sa 15. Feb 2025, 13:33

Re: Nachkommastellen anzeigen

Beitrag von Anfänger33 »

Danke an alle.
Die Antworten waren sehr hilfreich.

Antworten