AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Gleitkomma Wert, Nachkomma wird nicht dargestellt
Thema durchsuchen
Ansicht
Themen-Optionen

Gleitkomma Wert, Nachkomma wird nicht dargestellt

Ein Thema von TankWart · begonnen am 9. Mär 2007 · letzter Beitrag vom 9. Mär 2007
Antwort Antwort
TankWart

Registriert seit: 25. Feb 2005
46 Beiträge
 
#1

Gleitkomma Wert, Nachkomma wird nicht dargestellt

  Alt 9. Mär 2007, 10:08
Datenbank: firebird • Version: 1.5 • Zugriff über: ZEOS
Hallo zusammen,
wie muss ich Double Werte speichern, damit sie mir wieder richtig angezeigt werden?

Momentan gehe ich noch so vor:
Speichern:
Delphi-Quellcode:
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;
Also, zuerst die Berechnung.
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:
erg2 := ZQWettkampf.FieldByName('points').AsString;
erg := ZQWettkampf.FieldByName('points').AsFloat;
Wenn ich jetzt den Wert aus der DB lese, egal ob als String, oder Float, schneidet er mir immer die Nachkommastelle ab,
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt

  Alt 9. Mär 2007, 10:12
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.
Markus Kinzler
  Mit Zitat antworten Zitat
TankWart

Registriert seit: 25. Feb 2005
46 Beiträge
 
#3

Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt

  Alt 9. Mär 2007, 10:15
mhh??
verstehe jetzt nicht ganz, wie soll ich da dann vorgehn?
Löst das mein Problem?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt

  Alt 9. Mär 2007, 10:17
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.
Heiko
  Mit Zitat antworten Zitat
TankWart

Registriert seit: 25. Feb 2005
46 Beiträge
 
#5

Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt

  Alt 9. Mär 2007, 10:30
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt

  Alt 9. Mär 2007, 10:43
Verwendung Parameter:
Delphi-Quellcode:
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;
Vorteile:
-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]
Markus Kinzler
  Mit Zitat antworten Zitat
TankWart

Registriert seit: 25. Feb 2005
46 Beiträge
 
#7

Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt

  Alt 9. Mär 2007, 11:05
danke mkinzler,
werde in Zukunft dann wohl mit Parametern arbeiten.


Gruß

TankWart
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Gleitkomma Wert, Nachkomma wird nicht dargestellt

  Alt 9. Mär 2007, 13:29
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:
Query.Prepare;
for i to
begin
  ParambyNamr() bla

  ExecSQL;
end;
Bei ZEOS muss man das nicht selber machen,
sondern die Query wird bei erster Benutzung prepared und bleibt,
solange sich der SQL-Text nicht ändert.



Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz