Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Float-Werte für Filterung mit Nachkommastellen maskieren (https://www.delphipraxis.net/177508-float-werte-fuer-filterung-mit-nachkommastellen-maskieren.html)

messie 19. Apr 2015 19:59

AW: Float-Werte für Filterung mit Nachkommastellen maskieren
 
Zitat:

Zitat von mkinzler (Beitrag 1298428)
Zeige mal die Abfrage.

Meinst Du den View?
Code:
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
;
Egal wie ich round einstelle, in Flamerobin wird der View immer mit sechs Nachkommastellen angezeigt.

Grüße, Messie

Sir Rufo 19. Apr 2015 20:03

AW: Float-Werte für Filterung mit Nachkommastellen maskieren
 
Zitat:

Zitat von messie (Beitrag 1298429)
Zitat:

Zitat von mkinzler (Beitrag 1298428)
Zeige mal die Abfrage.

Meinst Du den View?

Nein, die View :mrgreen:

mkinzler 19. Apr 2015 20:22

AW: Float-Werte für Filterung mit Nachkommastellen maskieren
 
Zitat:

Egal wie ich round einstelle, in Flamerobin wird der View immer mit sechs Nachkommastellen angezeigt.
Nur angezeigt oder auch nicht gerundet?
Was für einen Typ hat die Spalte?

Dejan Vu 20. Apr 2015 06:34

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.

messie 20. Apr 2015 17:12

AW: Float-Werte für Filterung mit Nachkommastellen maskieren
 
Zitat:

Zitat von Dejan Vu (Beitrag 1298450)
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.).

Na ja, Delphi kann das schon. Ist da auch ein String unter der Haube?

Zitat:

Zitat von Dejan Vu (Beitrag 1298450)
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.

Die View scheint die drei Nachkommastellen zu können. Wohl aber nicht die Filterfunktion des Grids. Daher ist das wahrscheinlich auch nicht in der Dokumentation von Devart beschrieben. Ich weiß auch nicht, ob bei IBDAC Quellen dabei sind, ich befürchte nicht.

Grüße, Messie

mkinzler 20. Apr 2015 17:15

AW: Float-Werte für Filterung mit Nachkommastellen maskieren
 
Zitat:

Die View scheint die drei Nachkommastellen zu können. Wohl aber nicht die Filterfunktion des Grids. Daher ist das wahrscheinlich auch nicht in der Dokumentation von Devart beschrieben. Ich weiß auch nicht, ob bei IBDAC Quellen dabei sind, ich befürchte nicht.
Das kommt darauf an, ob du die Sourcen gekauft hast oder nicht. Die vom Grid sind aber glaube ich auf jeden Fall dabei.

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
;

messie 26. Apr 2015 16:10

AW: Float-Werte für Filterung mit Nachkommastellen maskieren
 
Super Markus,

das hat geklappt.

Vielen Dank!

Grüße, Messie

mkinzler 26. Apr 2015 18:22

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.

messie 26. Apr 2015 18:28

AW: Float-Werte für Filterung mit Nachkommastellen maskieren
 
Zitat:

Zitat von mkinzler (Beitrag 1299334)
Wenn du keine so vielen Nachkommastellen benötigst, könntest Du auch die Typen in der Datenbank entsprechend abändern.

Ok, da habe ich mit Float gearbeitet. Würde als Typ denn ein kleinerer DECIMAL gehen? Was würde das bei der Geschwindigkeit ausmachen?

Und vor allem: geht das rückwirkend zu ändern?

Grüße, Messie

mkinzler 26. Apr 2015 18:32

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 Uhr.
Seite 2 von 3     12 3      

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