![]() |
Datenbank: Firebird • Version: 2.5x • Zugriff über: IBDAC
Float-Werte für Filterung mit Nachkommastellen maskieren
Moin,
vielleicht fehlen mir nur die richtigen Suchbegriffe aber zu meiner Frage bekomme ich keine Ergebnisse. Ich habe Float-Felder, die ich gerne in einem TCRDBGrid filtern möchte. Die Funktion zum Filtern gehört ja dazu. Nun habe ich die Anzeige im Grid auf drei Nachkommastellen begrenzt. Eine Filterung schlägt deshalb fehl, da sie ja auf die DB und nicht auf die Anzeige angewendet wird und da sind die Nachkommastellen nicht begrenzt. Eine Aussage ob das vom TCRDBGrid so korrekt ist mag ich mangels Erfahrung nicht tätigen. Gibt es dazu eine sinnvolle Strategie? Danke, Messie |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Gibt es dort keine Option, ob die Filterung auf die Datenmengen-Werte oder die Anzeigewerte erfolgen soll? Bei DevExpress gibt es das z.b.
|
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Zitat:
Danke, Messie |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Andere Idee: Du prüfst auf Gleichheit, nicht wahr? Verwendest Du vielleicht den Filter des Datasets? Oder macht das dieses Grid?
Falls Du das machst, dann ändere die Bedingung von 'Feld=1.23' auf 'Feld>=1.229 and Feld<=1.231' o.ä.. |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Noch eine andere Idee:
Du erstellst eine Abfrage in der du das Floatfield auf 3 stellen rundest und nimmst die Abfrage als Datasource für das Grid
Delphi-Quellcode:
SELECT Floatwert, round([Floatwert],3) as Floatgerundet
FROM Tabelle |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Das funktioniert auch nicht zuverlässig, da '0.1 <> 1.0-0.9'. Altbekanntes floating point problem.
Wenn deine Anwendung kein BCD hat, musst Du in Delphi mit Bereichen filtern oder die Zahl als Text ansehen. Dann wird es aber mit Relationen schwierig (<,>) |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Moin,
und Danke für Eure Hilfe. Die Grid-Kompo filtert nach Gleichheit. Somit dürfte die Variante von Earlybird auf den ersten Blick die beste sein. Ich werde berichten. Grüße, Messie |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Hallo,
nun wollte ich da mal weiter machen. Leider entstehen in dem Projekt große zeitliche Pausen die es nicht einfacher machen, das richtig zu durchdringen - sorry. Die Variante von Earlybird hat nicht funktioniert. Ich habe den View auf die drei Stellen begrenzt und auch die Variante mit der neuen Variablen (as Roundedvalue) probiert. Ich verstehe es noch nicht ganz. Was mir auffällt, ist die Darstellung in Flamerobin. Warum bekomme ich sechs Nachkommastellen angezeigt, egal ob ich zwei oder drei Stellen im View angebe? Es kommt mir so vor als wäre der View gar nicht so gerundet wie erwartet. Danke, Messie |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Zitat:
das Thema ist jetzt tatsächlich wieder aktuell. Ich kann leider weiterhin nur Ganzzahlen filtern. Zahlen mit Nachkommastellen lassen sich nicht filtern, obwohl der zum Grid zugeordnete View mit drei Nachkommastellen erzeugt und angezeigt wird. Eine Zahl aus dem View 0,100 kann ich also nicht ausfiltern. Warum? Auch mein Round(Param,digits)-View wird in Flamerobin nicht korrekt angezeigt. Liegt das Problem darin? Grüße, Messie |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Zeige mal die Abfrage.
|
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Zitat:
Code:
Egal wie ich round einstelle, in Flamerobin wird der View immer mit sechs Nachkommastellen angezeigt.
select
Round(BATCHES.OUTPUT_PER_TURN,3) as OUTPUT_GERUNDET, PUMPS.STEP_COUNT, BATCHES.IDENTNO, BATCHES.DRAWING_NO, INTERNAL_ORDER_NO.INTERNAL_ORDER, INTERNAL_ORDER_NO.INTERNAL_ORDER, BATCHES.NUMBER_OF_PUMPS from BATCHES, INTERNAL_ORDER_NO, PUMPS where BATCHES.ORDER_ID = INTERNAL_ORDER_NO.ID and PUMPS.BATCH_ID = BATCHES.ID ; Grüße, Messie |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Zitat:
|
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Zitat:
Was für einen Typ hat die Spalte? |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Du kannst Floatingpoint runden, bis der Arzt kommt, dein Problem wird immer wieder auftreten. Eine Zahl 0.001 lässt sich nun einmal nicht genau als FP darstellen, d.h. Du rundest auf 3 Stellen, es kommt aber trotzdem 0.0099999999345 heraus (z.B.).
Nochmal zum Mitschreiben: Floating Point Werte und auf Gleichheit prüfen => geht nicht. Abhilfe: a: In der View dafür sorgen, das wirklich nur 3 Nachkommastellen auftauchen. Dafür kann man eine UDF schreiben und das Ergebnis entweder als BCD (hatten wir das nicht schon?) oder als String formatieren/konvertieren. b: Die gleiche Logik im TDataset als berechnetes Feld anwenden, das programmtechnisch garantiert 3 Nachkommastellen aufweist. Das geht in Delphi nur über einen String. Und dann mit diesem Feld filtern. |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Zitat:
Zitat:
Grüße, Messie |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Zitat:
Aber ich würde einfach die Anzahl der Nachkommastellen verringern und nicht nur Runden:
SQL-Code:
select
CAST (Round(BATCHES.OUTPUT_PER_TURN,3) as DECIMAL( 18,3)) as OUTPUT_GERUNDET, PUMPS.STEP_COUNT, BATCHES.IDENTNO, BATCHES.DRAWING_NO, INTERNAL_ORDER_NO.INTERNAL_ORDER, INTERNAL_ORDER_NO.INTERNAL_ORDER, BATCHES.NUMBER_OF_PUMPS from BATCHES, INTERNAL_ORDER_NO, PUMPS where BATCHES.ORDER_ID = INTERNAL_ORDER_NO.ID and PUMPS.BATCH_ID = BATCHES.ID ; |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Super Markus,
das hat geklappt. Vielen Dank! Grüße, Messie |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Wenn du keine so vielen Nachkommastellen benötigst, könntest Du auch die Typen in der Datenbank entsprechend abändern.
|
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Zitat:
Und vor allem: geht das rückwirkend zu ändern? Grüße, Messie |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Es würde jeweils der Cast entfallen. Den Typ kannst Du natürlich an die Bedürfnisse anpassen, DECIMAL(18,3) bedeuteu 15 Vor- und 3 Nachkommastellen.
Ob man den Typ entsprechend anpassen kann mustt Du schauen, notfalls über ein den Umweg einer weiteren Spalte. |
AW: Float-Werte für Filterung mit Nachkommastellen maskieren
Zitat:
Es geht nur um eine View, die dauert nicht so lange beim Aufruf. Grüße, Messie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 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-2025 by Thomas Breitkreuz