Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Rundungsproblem (https://www.delphipraxis.net/138505-rundungsproblem.html)

khh 12. Aug 2009 10:04

Re: Rundungsproblem
 
Zitat:

Zitat von mkinzler
Dann müsstest du das Komma temporär um 3 Stellen ( * 1000 / 1000) verschieben

ok so funktionierts
mit:
TRUNC(((nettopreis *1000) + (nettopreis* 1000/100 * CAST(:mwstsatz AS NUMERIC(15,2))) +0.5) ) as bruttopreis
habe ich richtig gerundet das 1000 fache.
bekomme ich das jetzt noch innerhalb des statements wieder durch 1000 geteilt in bruttopreis, oder geht das nicht ?

mkinzler 12. Aug 2009 10:09

Re: Rundungsproblem
 
Delphi-Quellcode:
<Ausdruck> := Trunc( <Ausdruck> * 10 ^<Stellen>) / 10 ^<Stellen>;

khh 12. Aug 2009 10:14

Re: Rundungsproblem
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
<Ausdruck> := Trunc( <Ausdruck> * 10 ^<Stellen>) / 10 ^<Stellen>;

ich meinte innerhalb des sqlstatements.

'select artikel_id,artikelpreis_id, bezeichnung, gilt_abmenge, nettopreis, TRUNC(((nettopreis *1000) + (nettopreis* 1000/100 * CAST(:mwstsatz AS NUMERIC(15,2))) +0.5) ) as bruttopreis from artikelpreise ............');
so hab ich jetzt in bruttopreis das richtig gerundete aber 1000 fache Eergebnis :-(

mkinzler 12. Aug 2009 10:28

Re: Rundungsproblem
 
Einfach nach dem Trunc durch 1000 teilen

khh 12. Aug 2009 10:59

Re: Rundungsproblem
 
Zitat:

Zitat von mkinzler
Einfach nach dem Trunc durch 1000 teilen

so hatte ich mir das auch gedacht,leider funktioniert das nicht, weiss der Teufel warum.
wenn ich _nicht_ teile steht im currency-feld 8500000, also das tausendfache was ich brauche
teile ich durch 10 steht im currency-feld 850000
teile ich durch 100 steht im currency-feld 80000
teile ich durch 1000 steht im currency-feld 0


was läuft da schief?

:-(
EDIT: sieht für mich so aus als würde das TRUNC erst nach den Rechenoperationen ausgeführt, oder?

mkinzler 12. Aug 2009 11:47

Re: Rundungsproblem
 
Zitat:

EDIT: sieht für mich so aus als würde das TRUNC erst nach den Rechenoperationen ausgeführt, oder?
Ja natürlich, ist ja eine Funktion

khh 12. Aug 2009 12:12

Re: Rundungsproblem
 
Zitat:

Zitat von mkinzler
Zitat:

EDIT: sieht für mich so aus als würde das TRUNC erst nach den Rechenoperationen ausgeführt, oder?
Ja natürlich, ist ja eine Funktion

tja und was mach ich dann, damit ich das Funktionsergebnis teilen kann?
so:
(TRUNC(((nettopreis *1000) + (nettopreis* 1000/100 * CAST(:mwstsatz AS NUMERIC(15,2))) +0.5) ))/1000 as bruttopreis

funktionierts ja nicht :-(

mkinzler 12. Aug 2009 12:15

Re: Rundungsproblem
 
Und warum nicht?

khh 12. Aug 2009 13:15

Re: Rundungsproblem
 
Zitat:

Zitat von mkinzler
Und warum nicht?

weil so das rauskommst was ich in #15 beschrieben habe.

khh 12. Aug 2009 13:19

Re: Rundungsproblem
 
Zitat:

Zitat von p80286
Hallo KH

dann addiere doch 0,005!

Allerdings hab ich ein leichtes Problem mit Deiner Vorgehensweise. Ich würde so viel wie möglich "in der DB" erledigen und dann den Rest mit Delphi, oder aber nur die Rohdaten aus der DB holen und dann in Delphi rechnen.
Deine Lösung mit der HinundherCasterei sehe ich mit leichtem Unbehagen, da ich mit den unterschiedlichen Typen (Oracle/Delphi) in einem ähnlichen Fall auf die Nase gefallen bin.

Gruß K-H

im Programm zu rechnen htte ich ja erst auch gedacht, aber wie krieg ich die Werte dann ins Datengrid?
im Moment mach ich das ja so:
TColumn(self.Columns[3]).Field:= FpreiseQuery.FieldByName('bruttopreis');


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