![]() |
Datenbank: firebird • Version: 1.5 • Zugriff über: ZEOS
Gleitkomma Wert, Nachkomma wird nicht dargestellt
Hallo zusammen,
wie muss ich Double Werte speichern, damit sie mir wieder richtig angezeigt werden? Momentan gehe ich noch so vor: Speichern:
Delphi-Quellcode:
Also, zuerst die Berechnung.
menge :=
(StrToFloat(panFirstScale.Caption) - StrToFloat(medtLastBalance.Text)); MengeStr := FloatToStr(Menge); MengeStr := Format('%.3f', [Menge]); MengeStr := StringReplace(MengeStr, ',', '.', [rfReplaceAll]); ZQuery1.Close; ZQuery1.SQL.Clear; ZQuery1.SQL.Text := 'UPDATE gesammt SET points = ' + MengeStr + ' WHERE gid = ' + ZQWettkampf.FieldByName('gid').AsString; ZQuery1.ExecSQL; Dann Format, es sollen immer 3 Nachkommastellen sein. Dann Komma durch Punkt ersetzen, sonnst kommt beim ausführen von ExecSQL eine Fehlermeldung. Wert in DB speichern Wert in DB ist dann z.B. 6,456. Ist das mit dem Komma richtig? Ich denke schon da er einen Punkt doch als tausender Trennzeigen erkennt. Lesen:
Delphi-Quellcode:
Wenn ich jetzt den Wert aus der DB lese, egal ob als String, oder Float, schneidet er mir immer die Nachkommastelle ab,
erg2 := ZQWettkampf.FieldByName('points').AsString;
erg := ZQWettkampf.FieldByName('points').AsFloat; obwohl der Wert richtig in der DB steht. Verstehe das echt nicht, warum er mir nicht mal den Wert als String richtig ausgibt, bin schon am Verzweifeln. Ich danke schon mal im Voraus Gruß TankWart |
Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt
Warum wird immer versucht alle Tapen als strings im Klartext in die Datenbank einzutragen? Da muß man sich mit alle Eventualitäten der Datentypen herumschlagen. Laß diese Arbeit doch von Delphi/dem DBMS lösen und verwende Parameter.
|
Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt
mhh??
verstehe jetzt nicht ganz, wie soll ich da dann vorgehn? Löst das mein Problem? |
Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt
Hallo,
*zustimm* Entweder "double precision" als Feldtyp nehmen und mit AsFloat speichern. oder noch besser, falls die Nachkommastellen fest sind (z.B. bei Euro), gleich nur Integer speichern (also bei Euro die EuroCent). Dann kann man mit den Werten gleich Rechnen in der DB. Heiko PS: Numeric speichert stellenweise als Integer ab. |
Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt
super hoika,
das Hilft mir schon mal. Sollte ich in Zukunft meine Werte Übergabe mit Parametern lösen? Ist das die elegantere Art? Und wo liegen da die Vorteile? Möcht ja lernen und mich verbessern. Danke an alle Gruß TankWart |
Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt
Verwendung Parameter:
Delphi-Quellcode:
Vorteile:
ZQuery1.SQL.Text := 'UPDATE gesammt SET points = :points WHERE gid = :gid';
... ZQuery1.SQL.ParamByName('gid').Value := ZQWettkampf.FieldByName('gid').Value; ZQuery1.SQL.ParamByName('points').Value :=Menge; ZQuery1.ExecSQL; -Wenn Datenformat variabel ist (Datum, Dezimaltrenne/Tausendertrenner, ...) muß man sich nicht drum kümmern. -beim mehrfacher Verwendung muß man nur die Parameter neu belegen. -übersichtlicher als zusammengestückelter Abfragestring -... [Edit: Tippfehler korrigiert] |
Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt
danke mkinzler,
werde in Zukunft dann wohl mit Parametern arbeiten. Gruß TankWart |
Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt
Hallo,
ein weiterer Vorteil ist, dass die Query "prepared" werden kann. Das heisst, der SQL-Server muss den Queryplan nur einmal "berechnen". Firebird ist damit etwa 50% schneller, wenn z.B. Daten in einer Schleife eingetragen werden.
Delphi-Quellcode:
Bei ZEOS muss man das nicht selber machen,
Query.Prepare;
for i to begin ParambyNamr() bla ExecSQL; end; sondern die Query wird bei erster Benutzung prepared und bleibt, solange sich der SQL-Text nicht ändert. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 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 by Thomas Breitkreuz