Rundungs-Unterschied Clipper <-> Xbase

Auf dem Weg von Clipper, FoxPro u.ä. nach Xbase++

Moderator: Moderatoren

Antworten
Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

Rundungs-Unterschied Clipper <-> Xbase

Beitrag 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.
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Rundungs-Unterschied Clipper <-> Xbase

Beitrag 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.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Rundungs-Unterschied Clipper <-> Xbase

Beitrag 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)
Gruß
Klaus
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Rundungs-Unterschied Clipper <-> Xbase

Beitrag 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.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Rundungs-Unterschied Clipper <-> Xbase

Beitrag 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.
Gruß
Klaus
Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

Re: Rundungs-Unterschied Clipper <-> Xbase

Beitrag 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 ...
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Rundungs-Unterschied Clipper <-> Xbase

Beitrag 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.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Rundungs-Unterschied Clipper <-> Xbase

Beitrag 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 !
Gruß
Hubert
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Rundungs-Unterschied Clipper <-> Xbase

Beitrag 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?
Grüsse Herbert
Immer in Bewegung...
Antworten