Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Rechnen mit double precision (https://www.delphipraxis.net/86747-rechnen-mit-double-precision.html)

hoika 19. Feb 2007 08:10

Datenbank: FB • Version: 1.5 • Zugriff über: egal

Rechnen mit double precision
 
Hallo #,

ich habe Records mit 2 double precision Feldern (Field_Min, Field_Sub).
Pro Eintrag (WorkStep) gibt es mehrere dieser Records
Etwa so

WorkStepId Min Sub
2 3.5 1.0
2 4.0 0.0
3 2.0 0.0

Die Werte enthalten maximal 2 Nachkommstellen.
Ich brauche die Summe aus Min-Sub von Workstep 2.

Man könnte das jetzt als
Select Sum(Min-Sub) From WorkStepTable Where WorkStepId=2 machen,
geht auch, aber DoublePrecision ist Fliesskomma (Rundungsfehler usw.)

Unter Delphi würde ich ja

Int (Int(Min*100)) - Int(Sub*100)) / 100

über auf Integer-Werte gehen können

Geht das auch unter Firebird (udf oder so ?)


Danke
Heiko

mkinzler 19. Feb 2007 08:16

Re: Rechnen mit double precision
 
Du könntest auch einen Cast nach Numeric versuchen.

hoika 19. Feb 2007 09:51

Re: Rechnen mit double precision
 
Hallo,

Numeric ist aber auch fliesskomma .. (zumindestens > 10,2)
Aber ein Cast auf Integer müsste ja vielleicht gehen ...
Hat denn FreeUDF dafür nix ???


Heiko

mkinzler 19. Feb 2007 10:04

Re: Rechnen mit double precision
 
mach doch einen expliziten Cast

hoika 19. Feb 2007 18:10

Re: Rechnen mit double precision
 
Hallo,

OK, erledigt, mit dem Cast zu Integer buw numeric(x mit x > irgendwas
scheint das zu klappen.
Muss nur mal ein paar "böse Daten" für Tests anlegen.


Heiko

Jelly 19. Feb 2007 20:37

Re: Rechnen mit double precision
 
Wenn du wirklich nur 2 Nachkommastellen berücksichtigen willst, kannst du auch

SQL-Code:
select cast (sum(min-sub)*100 as int) from tabelle where workstep = 4711
zum Ziel kommen.

hoika 20. Feb 2007 12:40

Re: Rechnen mit double precision
 
Hallo,

dabei kann es aber zu Rundungsfehlern beim sub führen,
deshalb multipliziere ich beide Werte vorher mit 100.
Der cast auf Integer ist ja dann sowas wie ein Trunc *hoff*


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 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