Erstellt vor 9 Jahren

Geschlossen vor 9 Jahren

Zuletzt geändert vor 6 Jahren

#189 closed Fehler (fixed)

Systematischer Fehler beim Runden ($form->round_amount)

Erstellt von: udono@… Verantwortlicher: udono@…
Priorität: sehr hoch Meilenstein:
Komponente: kivitendo ERP Version: 2.1.1
Schweregrad: kritisch Stichworte: Systemeinstellungen
Beobachter: andre@…, udono@…, roman_biliz@…

Beschreibung

Das Runden in Lx scheint fehlerhaft zu sein.
Probewerte auf zwei Stellen gerundet:
Eingabe: 10.014991, Ausgabe: 10.02, Richtig wäre: 10.01
Eingabe: 10.024991, Ausgabe: 10.03, Richtig wäre: 10.02
(Vgl. http://de.wikipedia.org/wiki/Rundung)

$form->round_amount Funktion könnte fehlerhaft sein.

Anhänge (3)

test.tar.gz (2.9 KB) - hinzugefügt von udono@… vor 9 Jahren.
Testmodul Lx-Zahlenkonvertierung
Bug189-spallek.diff (916 Byte) - hinzugefügt von udono@… vor 9 Jahren.
Patch zur round_amount in SL/Form.pm
Bug189-1-spallek.diff (1.0 KB) - hinzugefügt von udono@… vor 9 Jahren.
Korrigierter Patch

Alle Anhänge herunterladen als: .zip

Änderungshistorie (8)

Geändert vor 9 Jahren durch udono@…

Testmodul Lx-Zahlenkonvertierung

comment:1 Geändert vor 9 Jahren durch udono@…

Anleitung zum Testskript:

  1. entpacken
  2. die Dateien in die zugehörigen Ordner deiner Lx Installation kopieren

(vorsicht, wenn bereits eine custom_menu.ini oder eine bin/mozilla/test.pl
vorhanden ist...)

  1. Anmelden und loslegen:

Unter Test-->Fließkommaarithmetik erscheint eine Eingabemaske mit der man
verschiedene Berechnungen in Lx durchführen und die internen Funktionen zur
Zahlenkonvertierung testen kann.

-- Changelog --
custom_menu.ini war defekt. ERSETZT

Geändert vor 9 Jahren durch udono@…

Patch zur round_amount in SL/Form.pm

comment:2 Geändert vor 9 Jahren durch udono@…

  • Status von new nach assigned geändert
  • Verantwortlicher von p.reetz@… nach udono@… geändert

Hier ein erster Patch zur Rundungsfunktion. Es wurde das kaufmännische Runden
implementiert. (Vgl. http://de.wikipedia.org/wiki/Rundung)

Bitte testen.

comment:3 Geändert vor 9 Jahren durch udono@…

  • Lösung auf fixed gesetzt
  • Status von assigned nach closed geändert

Geändert vor 9 Jahren durch udono@…

Korrigierter Patch

comment:4 Geändert vor 9 Jahren durch udono@…

  • attachments.isobsolete von 0 nach 1 geändert

-- Changelog --
Füllt Integerwerte im Nachkommaanteil mit Nullen auf.

comment:5 Geändert vor 6 Jahren durch roman_biliz@…

  • Beobachter roman_biliz@… hinzugefügt

# Rounding like "Kaufmannsrunden"
# Descr. http://de.wikipedia.org/wiki/Rundung

Ist Fake! Man muss nicht alles nachmachen, was es überall in der Welt gibt. Warum wurde dann diese und nicht im Bericht beschriebene Schweizer Methode gewählt wenn es schon ums Geld geht? Oder die russische Bauernregel "mit der" sie ihre Raumschiffe fliegen lassen?

Bei dieser Methode entsteht eine Verzerrung. Warum muss man die Verzerrung überhaupt haben? Man hat den Rechner nicht dafür erfunden um ihn mit "Erleichterungen aus dem Menschlichen Leben" zu füttern.

  • Normales arithmetisches Runden aus dem Machebuch ist richtig!

Form.pm Fix:

# $amount = $amount * (10($places));
# $round_amount = int($amount + .5 * ($amount <=> 0)) / (10
($places));

my $roundrule = "%." . $places ."f";
$round_amount = sprintf("$roundrule", $amount);

Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.