AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

kaufmännisch runden

Offene Frage von "himitsu"
Ein Thema von rapante · begonnen am 26. Nov 2013 · letzter Beitrag vom 4. Dez 2013
Antwort Antwort
Seite 3 von 4     123 4      
arnof

Registriert seit: 25. Apr 2013
1.250 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#21

AW: kaufmännisch runden

  Alt 27. Nov 2013, 14:47
@JasonDX: hat Du hier die Frage gestellt ?

Wenn Du einen Sinnvollen Beitrag hast, dann schreibe Ihn. Wenn Du meinst, das mein Beitrag falsch ist, dann hoffe ich für deine Kunden, das Du nichts mit WAWIS/ERP-System usw in der Entwicklung zu tun hast!
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#22

AW: kaufmännisch runden

  Alt 27. Nov 2013, 15:03
@JasonDX: hat Du hier die Frage gestellt ?

Wenn Du einen Sinnvollen Beitrag hast, dann schreibe Ihn.
Ich habe den Thread nicht begonnen, aber es haben sich im Verlauf Fragen für mich aufgetan, die die von dir vorgeschlagene Lösung betreffen. Die erste Frage war die: Was passiert, wenn einer der nicht vorgesehenen edge-cases auftritt? Die Frage baut auf der Beobachtung auf, dass der Lösungsvorschlag nicht alle Fälle korrekt behandelt.
Die zweite Frage im Beitrag war die was passiert, wenn eine Lösung verwendet wird, welche alle Fälle korrekt abdeckt. Ich bin noch keine 25 Jahre dabei, insofern ist es durchaus interessant zu wissen, wieso eine Lösung der anderen vorgezogen wird.
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.250 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#23

AW: kaufmännisch runden

  Alt 27. Nov 2013, 15:33
Jeder muss wissen wie er es löst, den Gedanken was dazuzurechnen ist erstmal ungewöhnlich und macht sicher auf den ersten Blick komisch und mag falsch erscheinen. Andere Datentypen zu nehmen ist sicher auch eine Lösung, ich möchte mich aber nicht nur auf EMBA verlassen, manchmal ist man da halt auch verlassen

Ich kann nur aus meiner Erfahrung sagen, da ich mich in meinen Programmiererleben sicher viele Monate damit beschäftigt habe.

Vor dem runden einfach 0.000000000001 oder sowas in der Art addieren, dann klapp es auch mit dem Runden auf 2 Stellen
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#24

AW: kaufmännisch runden

  Alt 27. Nov 2013, 16:05
Hallo,

habe normalerweise nicht viel mit Fließkommaoperationen zu tun, aber vor Jahren einen Code aus der Computersteinzeit (COBOL) gesehen. Dort wurden für Beträge erstmal grundsätzlich nur ganze Zahlen gespeichert, also z.B. Beträge in Cent. Bei jeglicher Prozentrechnung oder Division wurde dem Ergebnis 0.5 hinzuaddiert und dann der Nachkommaanteil einfach abgeschnitten. Hat wohl zufriedenstellend funktioniert (stammte angeblich aus der Versicherungsbranche). Den Code habe ich leider nicht mehr, erinnere mich aber noch gut an diese seltsame Methode ... hth
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#25

AW: kaufmännisch runden

  Alt 27. Nov 2013, 18:49
Weil es im weitesten Sinne zum Thema passt: http://javathreads.de/2009/03/niemal...ege-berechnen/
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#26

AW: kaufmännisch runden

  Alt 27. Nov 2013, 18:52
@billa:
Das von Dir beschriebene Verfahren ist nicht ungewöhnlich, in COBOL gibt es aber die Ergänzung "ROUNDED" für Multiplikationen, Divisionen und "Computations", die so etwas automatisch erledigen. Die Rundung nach ähnlicher Methode habe ich selbst in kaufmännischen Anwendungen selbst schon in C++ und in Assembler benutzt.

@arnof, JasonDX:
Rechnungen mit Fließkommazahlen sind nunmal ungenau und deshalb generell nicht für kaufmännische Zwecke geeignet. Das Addieren von einem noch so kleinen "epsilon" ist und bleibt ein Hack. Wenn einem kein "Dezimal"-Datentyp zur Verfügung steht, ist es besser, bei COBOL abzugucken und alle Rechnungen mit Ganzzahlarithmetik durchzuführen - die ist nämlich genau und man hat Rundungsvorgänge selbst in der Hand.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#27

AW: kaufmännisch runden

  Alt 27. Nov 2013, 19:47
Wie man wo rundet, ist vermutlich auch anwendungsspezifisch.
Bei durch Menschen nachvollziehenden Rechnungen, kann ich mir gut vorstellen, dass das Runden nach jeder Operation (Zinsen berechnen) passiert und das Auf-/Abrunden durch Verträge geregelt ist.
Wenn ein komplexes Modell eine bestimmten Erwartungswert für die interne Verwendung ausspucken soll, wird vielleicht nur am Ende gerundet.

Das Runden durch Addieren von 5 auf der ersten nicht-signifikanten Stelle finde ich nicht so ungewöhnlich. Im Grunde realisiert man damit das normale Runden auf eine bestimmte Stelle ohne irgendwelche Sprünge.
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.250 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#28

AW: kaufmännisch runden

  Alt 27. Nov 2013, 20:52
Wie man wo rundet, ist vermutlich auch anwendungsspezifisch.
Bei durch Menschen nachvollziehenden Rechnungen, kann ich mir gut vorstellen, dass das Runden nach jeder Operation (Zinsen berechnen) passiert und das Auf-/Abrunden durch Verträge geregelt ist.
Wenn ein komplexes Modell eine bestimmten Erwartungswert für die interne Verwendung ausspucken soll, wird vielleicht nur am Ende gerundet.

Das Runden durch Addieren von 5 auf der ersten nicht-signifikanten Stelle finde ich nicht so ungewöhnlich. Im Grunde realisiert man damit das normale Runden auf eine bestimmte Stelle ohne irgendwelche Sprünge.
COBOL nein danke, gibt es das überhaupt noch in der normalen Welt?

Das Runden hat man selbst im griff, wenn man eine eigene Rundungfunktion generell benutzt, was ich immer mache.

Es gibt ja auch andere Länder in denen komplett anders zu Runden ist:Beispiel Schweiz, da ist die kleinste Einheit 5 Rappen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.015 Beiträge
 
Delphi 12 Athens
 
#29

AW: kaufmännisch runden

  Alt 27. Nov 2013, 21:42
COBOL nein danke, gibt es das überhaupt noch in der normalen Welt?
Bah! Da kann ich noch einen drauf geben. Aus dem IBM RPG II Reference Manual für System/36:

Zitat:
Half-adjusting is when the single digit to the right of the last decimal
position specified is added to the same position in the result field. All decimal positions
to the right of the position specified for that field are then dropped
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
laboca

Registriert seit: 10. Apr 2012
Ort: Euskirchen, NRW
4 Beiträge
 
Delphi XE3 Professional
 
#30

AW: kaufmännisch runden

  Alt 30. Nov 2013, 00:23
Hallo,

irgendwie kehrt die Diskussion über Rundung immer wieder auf.
Hier muss man wohl unterscheiden was gerundet werden soll und nach welcher Regel.
Mathematisch, Kaufmännisch oder Banker's Rounding.
Und ob es ein positiver oder negativer Betrag ist.

Auch in der kaufmännischen Rundung spielt die 4 oder 5 Stelle nach dem Komma durchaus eine Rolle, wenn man mal Zinsdifferenzgeschäfte bei einer Bank betrachten würde. Im "Tante Emma" Laden eher weniger wenn's um "drei fünfundneunzig" geht...

Ganz gut im kaufmännischen Bereich bin ich mit folgender Funktion gefahren (hab ich mal aufgeschnappt oder zusammengestrickt oder wie auch immer.. ist lange her, daher kenne ich auch den Urheber nicht mehr der den Ansatz/Lösung gebaut hat, also nicht meine Federn...)

Code:
function RoundX( value: extended; const n: integer): extended;
var
  exp: extended;
  mode: TFPURoundingMode;
begin
  value := StrToFloat(FloatToStr(value));

  mode := GetRoundMode;
  exp := IntPower(10, n);
  if value > 0 then
  begin
    SetRoundMode(rmUp);
    result := trunc(value * exp + 0.5) / exp;
  end
  else
  begin
    SetRoundMode(rmDown);
    result := trunc(value * exp - 0.5) / exp;
  end;
  SetRoundMode(mode);
end;
HIH
  Mit Zitat antworten Zitat
Alt 3. Dez 2013, 22:34     Erstellt von Smut
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 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