Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   sql-round (https://www.delphipraxis.net/150243-sql-round.html)

khh 11. Apr 2010 10:47

Datenbank: firebird • Version: 2.1 • Zugriff über: zeos

sql-round
 
hallo zusammen,
was ist an dieser formel falsch?
SQL-Code:
update artikelpreise set NETTOPREIS = Round((bruttopreis/107 * 100),3);
das Ergebnis ist gerundet auf eine Stelle hinterm Komma, ich brauch aber 3 Stellen :-(
beide felder sind decimal(8,3)


danke Gruss Kh

haentschman 11. Apr 2010 11:04

Re: sql-round
 
Hallo,

ist das genau dein SQL oder nur sinngemäß ?

mkinzler 11. Apr 2010 11:09

Re: sql-round
 
Eigentlich stimmt der Aufruf. Verwendest du die UDF oder die builtin-Funktion?

khh 11. Apr 2010 11:12

Re: sql-round
 
Zitat:

Zitat von mkinzler
Eigentlich stimmt der Aufruf. Verwendest du die UDF oder die builtin-Funktion?

habe es genau so als Script im IB-expert ausgeführt

aus einem Bruttopreis von 1,000 macht er 0,900 :-(

mkinzler 11. Apr 2010 11:17

Re: sql-round
 
Früher war diese Funktion nur per UDF verfügbar ab FB 2.1 auch direkt ohne die UDF. Deshalb meine Frage.

khh 11. Apr 2010 11:21

Re: sql-round
 
ich hab grad nochmal im Programm nachgeschaut.
dort runde ich mit der Funktion RoundCurrency , damit das Ergebnis richtig kaufmännisch gerundet wird.

Vieleicht geht das kaufmännische runden mit sql-Funktion ja gar nicht?

mkinzler 11. Apr 2010 11:26

Re: sql-round
 
Die interen Funktion rundet ab einer 5 auf und bis 4 ab

khh 11. Apr 2010 11:27

Re: sql-round
 
Zitat:

Zitat von mkinzler
Die interen Funktion rundet ab einer 5 auf und bis 4 ab


das ist ja auch richtig
aber warum wird aus 0,934 - 0,900 ?

mkinzler 11. Apr 2010 11:30

Re: sql-round
 
Dütfte nicht sein, deshalb auch die Frage ob du vielleicht eine gleichlautende UDF-Funktion nutzt!

khh 11. Apr 2010 11:33

Re: sql-round
 
Zitat:

Zitat von mkinzler
Dütfte nicht sein, deshalb auch die Frage ob du vielleicht eine gleichlautende UDF-Funktion nutzt!

mh, und wie kann ich das rausfinden?
hab ganz einfach das Script im sql-editor von ib-expert ausgeführt

mkinzler 11. Apr 2010 11:38

Re: sql-round
 
Schau mal im IbExpert unter UDF nach.

Was liefert
SQL-Code:
select bruttopreis/107 * 100 as brutto, Round(bruttopreis/107 * 100,3) as netto from artikelpreise;

khh 11. Apr 2010 11:43

Re: sql-round
 
Zitat:

Zitat von mkinzler
Schau mal im IbExpert unter UDF nach.

Was liefert
SQL-Code:
select bruttopreis/107 * 100 as brutto, Round(bruttopreis/107 * 100,3) as netto from artikelpreise;

das liefert in brutto und netto das Gleiche nämlich genauso 0,900 , also die falsche Rundung

UDF gibts nur get_context und set_context

mkinzler 11. Apr 2010 11:52

Re: sql-round
 
Dann liegt der Fehler ja nicht am Round sondern an der Berechnung, denn 0,900 ergibt auf 3 Nachkommastellen gerundet 0,900

khh 11. Apr 2010 12:05

Re: sql-round
 
Zitat:

Zitat von mkinzler
Dann liegt der Fehler ja nicht am Round sondern an der Berechnung, denn 0,900 ergibt auf 3 Nachkommastellen gerundet 0,900

ich glaube jetzt haben wir uns falsch verstanden :-(


ich rechne 1,000 / 107 * 100 = 09,345 von hand.

die Formel rechnet 1,000 / 107 * 100 = 09,000
SQL-Code:
update artikelpreise set NETTOPREIS = round((bruttopreis/107 * 100),5);
oder
update artikelpreise set NETTOPREIS = round((bruttopreis/107 * 100),3);
dabei hab ich grad gemerkt es ist egal ob 3 oder 5 oder sonst was als 2tes Argument in der Formel steht :-(

das Ergebmis ist das Gleiche

auch
SQL-Code:
select bruttopreis/107 * 100 as brutto, Round(bruttopreis/107 * 100,5) as netto from artikelpreise;
bringt das gleiche Ergebnis

mkinzler 11. Apr 2010 12:19

Re: sql-round
 
Zitat:

ich glaube jetzt haben wir uns falsch verstanden Sad
Nein, denn das Round wird wohl schon mit dem falschen Wert gefüttert.

Was ergibt
SQL-Code:
select bruttopreis/1.07 from artikelpreise;

khh 11. Apr 2010 12:24

Re: sql-round
 
Zitat:

Zitat von mkinzler
Was ergibt
SQL-Code:
select bruttopreis/1.07 from artikelpreise;

das ergibt den richtigen wert :-)

ist aber doch das Gleiche wie bruttopreis/107 * 100 ?

mkinzler 11. Apr 2010 12:29

Re: sql-round
 
Jein. Beim Berechnen scheint der kleinste kompatible Typ verwendet zu werden.

bei 1.0 / 107 ist das der Integer von 107
->
bruttopreis/107.0 * 100.0

khh 11. Apr 2010 12:44

Re: sql-round
 
Zitat:

Zitat von mkinzler
Jein. Beim Berechnen scheint der kleinste kompatible Typ verwendet zu werden.

bei 1.0 / 107 ist das der Integer von 107
->
bruttopreis/107.0 * 100.0

das ergibt dann 0,930 anstatt 09,345

naja ich machs jetz mit bruttopreis/1.07, dann passts


war jetzt wirklich ne schwere Geburt ;-)


ich danke euch.

Gruss KH


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