#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)
Änderungshistorie (8)
Geändert vor 9 Jahren durch udono@…
comment:1 Geändert vor 9 Jahren durch udono@…
Anleitung zum Testskript:
- entpacken
- 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...)
- 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
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
comment:4 Geändert vor 9 Jahren durch udono@…
-- 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);

Testmodul Lx-Zahlenkonvertierung