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 |
AW: StrToFloat bei Datenexport
Dein Problem ist also eher andersrum.
DisplayFormat / EditFormat (DB-Komponenten) ... FloatToStr FloatToStrF FloatToText Format ... ... ... |
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 |
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:
intern hat der "d" wert wie das von dir erwähnte endlos lange nachkommastellen zeug, es ist numal eine fließkomma zahl.
var
d: double; begin d := 1.99; Label1.Caption := FormatFloat('0.00', d); end; wenn du dir nun Label1 anschaust wirst du feststellen das es bei "1,99" bleibt dank formatierung. |
AW: StrToFloat bei Datenexport
Hallo,
oder so 'Data.DB.TField.DisplayFormat' https://docwiki.embarcadero.com/Libr....DisplayFormat Gruß |
AW: StrToFloat bei Datenexport
Zitat:
|
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 |
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ß |
AW: StrToFloat bei Datenexport
Wie gesagt, bei DB-Komponenten (besseren DBGrids, als dem von Delphi
oder direkt in der DataSource (TFloatField/TNumericField.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 |
AW: StrToFloat bei Datenexport
Zitat:
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. |
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