Seite 1 von 1

Rundungs-Unterschied Clipper <-> Xbase

Verfasst: Mi, 04. Mai 2016 18:12
von BJelinek
Hallo zusammen.

habe ein Problem mit der Rundung beim Wegschreiben in DBF-Datei

Datenbank Feld MWST1 ist Numerisch 10 mit 2 Nachkommastellen

repl MWST1 with 102.5050

ergibt in clipper 102,51
in Xbase 102,50

in der Summierung mehrer Felder gibt es dann Abweichungen.

Kann man das irgendwo Zentral beeinflussen ?
Die Hotline meint halt ich soll die round() Funktion verwenden.
Ha ha überall im programm ändern

Habt Ihr eine andere Lösung ?
Danke für Eure Mühe.

Re: Rundungs-Unterschied Clipper <-> Xbase

Verfasst: Fr, 06. Mai 2016 12:49
von Herbert
Die Frage ist, was du tatsächlich denn gespeichert haben willst? Du sendest einen um eine Dezimalstelle höheren Wert. Abschneiden, abrunden oder aufrunden ist gefragt.
In solchen Situationen wird rechts einfach abgeschnitten, weil kein Platz da ist.

Sinnigerweise müsstest du deinem mwst-Feld mehr Nachkommastellen geben (mind. 1) und gegebenenfalls bei Summenbildung erst runden.

Re: Rundungs-Unterschied Clipper <-> Xbase

Verfasst: Sa, 07. Mai 2016 9:32
von Koverhage
Die Hotline meint halt ich soll die round() Funktion verwenden.
Eigentlich wäre das relativ einfach wenn das Schreiben an zentraler Stelle erfolgt
repl MWST1 with round(102.5050,2)

Re: Rundungs-Unterschied Clipper <-> Xbase

Verfasst: So, 08. Mai 2016 11:08
von Herbert
Klaus,
MwSt-fachlich gesehen ist dies keine Lösung. Falls du mehrere Posten hast, macht es Sinn erst die Summe der relevanten Posten zu runden und nicht die einzelnen Detailposten.
Daher mein Einwand, dem Datenfeld mehr Nachkommastellen zu geben.
Ich weiss aber nicht, ob diese MwSt da bereits eine Endsumme darstellt oder nicht.

Re: Rundungs-Unterschied Clipper <-> Xbase

Verfasst: Mo, 09. Mai 2016 7:13
von Koverhage
Herbert,
Ich weiss aber nicht, ob diese MwSt da bereits eine Endsumme darstellt oder nicht.
genau das wissen wir beide nicht ;-)
Daher mein Einwand, dem Datenfeld mehr Nachkommastellen zu geben.
Dies nützt nichts wenn auf der rechnung, etc. die einzelnen Positionen mit Netto und Brutto dargestellt werden.

Re: Rundungs-Unterschied Clipper <-> Xbase

Verfasst: Mo, 09. Mai 2016 17:04
von BJelinek
Danke für die Antworten.

Es geht primär nicht um MWST, da ist es halt im Mischbetrieb aufgefallen.
Ich hätte besser ein Feld TEST_NUM genommen, um keine MWSt Diskussion zu entfachen.

Es geht einfach um den Unterschied Clipper <-> Xbase beim Befüllen
von Numerischen Feldern in DBF-Dateien.

Bisher musste dies nicht berücksichtigt werden. Habe es auch nicht unter Unterschiede
Clipper <-> Xbase gefunden.
Klar, wenn man es weiß, muss ich in Zukunft dies berücksichtigen und selber runden.
z.B. mit einer eigenen REPL Funktion.

Ich hatte gehofft, dass es so etwas wie GETSYS.PRG gibt, in der man die Rundung hätte
einbauen können, oder Einfluss auf den DBF-Treiber nehmen.

Wie verhält es sich eigentlich bei anderen Datenbanken ? SQL Foxpro ...

Re: Rundungs-Unterschied Clipper <-> Xbase

Verfasst: Mo, 09. Mai 2016 17:21
von Herbert
Ich erwarte generell ein Abrunden.
Aber es ist sicher schlecht, das DB-System entscheiden zu lassen, was nun sein soll. Also mach ein ROUND oder eben keins.

Re: Rundungs-Unterschied Clipper <-> Xbase

Verfasst: Di, 10. Mai 2016 11:17
von brandelh
Mir ist der Rundungsunterschied tatsächlich nie aufgefallen ;-)

Bei einem früheren Programm das Zinsen pro Monat aufsummieren muss trat aber ein ähnliches Problem auf, die interne Variable und der Ausdruck stimmten nicht überein ...
Also das was auf dem Papier gedruckt (gerundet) wurde und die Endsumme die unten dann gedruckt wurde.

Hier musste ich in jeder Zeile die Summe um die gerundeten Zinsen erhöhen, nicht die einfach berechneten.
Wenn die Rundung beim Speichern nicht stimmt, muss man selbst runden.

Bei einer SQL Anweisung würde man schon gerundete Werte übergeben !

Re: Rundungs-Unterschied Clipper <-> Xbase

Verfasst: Di, 10. Mai 2016 11:53
von Herbert
brandelh hat geschrieben:Bei einer SQL Anweisung würde man schon gerundete Werte übergeben !
Das müsstest doch auch programmieren? Oder sehe ich da was falsch?