Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StrToFloat bei Datenexport (https://www.delphipraxis.net/209796-strtofloat-bei-datenexport.html)

OsCor 23. Jan 2022 18:56

Delphi-Version: 10.4 Sydney

StrToFloat bei Datenexport
 
Hallo!

Wenn ich einen Singlewert in einen String umwandeln möchte, gibt es ja diverse Möglichkeiten der Formatierung.
Aber: Bei der Dateneingabe per Editfeld gebe ich Werte ein, die ich nach Umwandlung per StrToFloat einer Access-Datenbank übergebe, wo diese Werte als Zahlen abgespeichert werden. Dort kann ich vorgeben, mit wie viel Dezimalstellen eine solche Zahl angezeigt werden soll; abgespeichert wird aber offensichtlich das, was StrToFloat erzeugt - eine Zahl, die ganz weit hinten noch so ein Zahlenschwänzchen hat. So weit, so gut. Aber wenn ich einen solchen Single-Wert in einem DBGrid anzeigen möchte, werden mir bei den meisten Werten diese ewig vielen Stellen hinter dem Komma angezeigt und ich sehe im Moment keinen Weg, das zu ändern.

Jemand von euch?
Oswald

himitsu 23. Jan 2022 19:52

AW: StrToFloat bei Datenexport
 
Dein Problem ist also eher andersrum.

DisplayFormat / EditFormat (DB-Komponenten)
...
FloatToStr
FloatToStrF
FloatToText
Format
...
...
...

OsCor 23. Jan 2022 20:12

AW: StrToFloat bei Datenexport
 
Ich weiß nicht, ob wir uns richtig verstehen. Wenn ich einen einfachen Wert wie 1,1 in ein Edit-Control eingebe und es per StrToFloat umwandle, bekomme ich doch immer einen Wert, der etwa aussieht wie 1,100000000000748 oder so - und das kann ich nicht verhindern, oder? Diesen Wert speichere ich in der Datenbank ab.
Die Rückumwandlung und Darstellung in einem Editfeld ist ja nicht das Problem, da habe ich ja die Möglichkeit der Formatierung. Die direkte Übernahme aus der Datenbank in ein DBGrid lässt mir aber nach bisherigem Wissen keine Möglichkeit, die Darstellung zu steuern.

Gruß
Oswald

KodeZwerg 23. Jan 2022 20:37

AW: StrToFloat bei Datenexport
 
ich vermute mal was himitsu sage wollte, deine denkweise ist an der stelle etwas falsch.
ich gebe dir ein beispiel, vielleicht kommst du so einen schritt weiter.

Delphi-Quellcode:
var
  d: double;
begin
  d := 1.99;
  Label1.Caption := FormatFloat('0.00', d);
end;
intern hat der "d" wert wie das von dir erwähnte endlos lange nachkommastellen zeug, es ist numal eine fließkomma zahl.
wenn du dir nun Label1 anschaust wirst du feststellen das es bei "1,99" bleibt dank formatierung.

mmw 23. Jan 2022 20:53

AW: StrToFloat bei Datenexport
 
Hallo,

oder so

'Data.DB.TField.DisplayFormat'

https://docwiki.embarcadero.com/Libr....DisplayFormat

Gruß

Uwe Raabe 23. Jan 2022 21:09

AW: StrToFloat bei Datenexport
 
Zitat:

Zitat von OsCor (Beitrag 1501085)
Wenn ich einen einfachen Wert wie 1,1 in ein Edit-Control eingebe und es per StrToFloat umwandle, bekomme ich doch immer einen Wert, der etwa aussieht wie 1,100000000000748 oder so

Das liegt daran, dass 1,1 nicht exakt als Single bzw. Double darstellbar ist. Siehe hier: https://www.h-schmidt.net/FloatConverter/IEEE754de.html

OsCor 23. Jan 2022 21:15

AW: StrToFloat bei Datenexport
 
Mist, ich drücke mich offensichtlich immer noch nicht genau genug aus. Dein Code-Beispiel (KodeZwerg) ist mir völlig klar. Aber es gibt nach meinem jetzigen Wissen keine Möglichkeit, eine Gleitkommazahl formatiert in ein Zahlenfeld meiner Datenbank zu übertragen. In der Datenbank befindet sich der gleiche Wert, wie ihn StrToFloat erzeugt.
Inhalt des Edit-Feldes: 1,1
Übertragung in die Datenbank über ADOTable: ADOTable1.FieldByName('Säure').AsFloat := StrToFloat(Edit1.Text) --> In der Datenbank steht 1,10000000345
Retrieval per DBGrid: in der Zelle für das Feld 'Säure' steht der Wert 1,10000000345

So wie es aussieht, wäre die einzige Möglichkeit, Zahlenwerte in einem Grid formatiert darzustellen, etwa das Stringgrid - vom Layout her wirklich umständlich zu bewerkstelligen.
Im Moment tendiere ich dazu, die Datenbankfelder für Zahlen als Textfelder zu definieren und Abfragen in Delphi zu erstellen.
Meine Hoffnung war ja, dass es vielleicht doch einen Weg geben könnte, Zahlenwerte aus der Datenbank korrekt im DBGrid darzustellen.

@Uwe Raabe Das ist mir schon klar, deswegen vergleicht man ja Gleitkommawerte nicht direkt.

@mmw An welcher Stelle könnte ich das einsetzen? Wenn ich ein DBGrid habe und an eine Tabelle anbinde, gibt es doch keine Filtermöglichkeit mehr dazwischen, oder?

Gruß
Oswald

mmw 23. Jan 2022 21:26

AW: StrToFloat bei Datenexport
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

dazu muß man die entsprechenden Felder hinzufügen.

d.h. z.B. eine

'TTable' - Komponente mit recht's klick, dann die gewünschten Felder hinzufügen. Anschließend kann man im Objectinspector
die Felder entprechend bearbeiten.

siehe Anhang

Gruß

himitsu 23. Jan 2022 22:28

AW: StrToFloat bei Datenexport
 
Wie gesagt, bei DB-Komponenten (besseren DBGrids, als dem von Delphi
oder direkt in der DataSource (TFloatField/Delphi-Referenz durchsuchenTNumericField.DisplayFormat)

Die TFields kann man zur Designtime erstellen oder erstellen lassen
oder es zur Laufzeit zuweisen.
Sind beim Open keine Fields vorhanden, dann werden sie automatisch generiert.
Sobald man auch nur ein Field vorm Open selbst erstellt, dann muß man alle Fields selbst erstellen/erstellen lassen.

Delphi-Quellcode:
ADOTable1.FieldByName('Säure').AsFloat := StrToFloat(Edit1.Text);

ADOTable1.FieldByName('Säure').AsString := Edit1.Text; // wenn das ein NUMERIC ist

Uwe Raabe 23. Jan 2022 22:45

AW: StrToFloat bei Datenexport
 
Zitat:

Zitat von himitsu (Beitrag 1501091)
Sobald man auch nur ein Field vorm Open selbst erstellt, dann muß man alle Fields selbst erstellen/erstellen lassen.

Das ist aber schon etwas veraltet.

Mit FieldOptions.AutoCreateMode := acCombineAlways werden alle Felder angelegt, die nicht statisch sind. FieldOptions.PositionMode steuert, wo die automatisch erzeugten platziert werden, und mit FieldOptions.UpdatePersistent kann man die statischen Felder auch noch an die tatsächliche Datenfeldgröße (z.B. bei Stringfeldern) anpassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 Uhr.
Seite 1 von 3  1 23      

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