Eintragsdetails ansehen
ID | Projekt | Kategorie | Sichtbarkeit | Meldungsdatum | Zuletzt aktualisiert |
---|---|---|---|---|---|
0000047 | Schwäbisch Hall | Verbesserung | öffentlich | 2017-01-08 20:19 | 2017-01-08 21:47 |
Reporter | Quirin | Bearbeitung durch | frank | ||
Priorität | normal | Schweregrad | Feature-Wunsch | Reproduzierbar | N/A |
Status | geschlossen | Lösung | erledigt | ||
Rechnertyp | PC | Betriebssystem | Windows | BS-Version | Java 8 |
Produktversion | 2.1.3 | ||||
Zielversion | 2.1.4 | Behoben in Version | 2.1.4 | ||
Zusammenfassung | 0000047: Fehler bei Salden durch unglücklichen Datentyp | ||||
Beschreibung | Fehlermeldung beim Log-Level-DEBUG: "Das stimmt was mit den Salden nicht...!" Der Datentyp für Geldbeträge ist unglücklich gewählt. Verglichen wird z.B. "6171.3499999999985 mit 6171.35" Was fast gleich ist aber eben nicht gleich. Runden ist keine Gute Idee. In Java nimmt man für Geldbeträge als Datentyp Biginteger; steht in JS aber natürlich nicht zur Verfügung. Eine geschicktere Möglichkeit ist es einen Prototype zu definieren: //http://stackoverflow.com/questions/2876536/precise-financial-calculation-in-javascript-what-are-the-gotchas var Money = function (amount) { this.amount = amount; }; Money.prototype.valueOf = function () { return Math.round(this.amount * 100) / 100; }; var m = new Money(50.42355446); var n = new Money(30.342141); Logger.info(m.amount + n.amount); //80.76569546 Logger.info(m + n); //80.76 Man müsste also alle "Amounts" etc durch Money ersetzen. | ||||
Tags | Keine Tags zugeordnet. | ||||
|
Hallo Qurin, danke für den Hinweis. Prinzipiell macht die Routine ja auch nichts anderes. Sie rundet auf 2 Stellen, sowie das ValueOf des erweiterten Prototypen auch. Der Fehler im Skript liegt darin, das einmal, nämlich beim Testen gerundet wird, dass andere mal beim Erstellen der Buchungen aber nicht. Daher der Fehler. Die Überprüfungsroutine ist übrigens noch ein Code-Fragment aus einem älterem Skript und würde dort eigentlich gar nicht mehr benötigt. Wie aber schon an anderer Stelle gesagt, bin ich dabei, alles auf ein Java-Backend umzustellen. Deshalb gibt es hier auch nur ein Bugfix. Das wird aber das Runden des Saldos beim Erstellen haben und sollte dann auch diese Unschönheit beseitigen. Viele Grüße, Frank |
|
Skript wird nicht mehr auf eine neuen Geldbetragtyp umgestellt. Fehler ist aber dadurch behoben, das beim Erstellen der Saldos auch gerundet wird. |
Änderungsdatum | Benutzername | Feld | Änderung |
---|---|---|---|
2017-01-08 20:19 | Quirin | Neuer Eintrag | |
2017-01-08 20:19 | Quirin | Status | neu => zugewiesen |
2017-01-08 20:19 | Quirin | Bearbeitung durch | => frank |
2017-01-08 20:48 | guest | Notiz hinzugefügt: 0000035 | |
2017-01-08 20:49 | frank | Zielversion | => 2.1.4 |
2017-01-08 20:55 | frank | Notiz hinzugefügt: 0000037 | |
2017-01-08 21:47 | frank | Notiz hinzugefügt: 0000040 | |
2017-01-08 21:47 | frank | Status | zugewiesen => geschlossen |
2017-01-08 21:47 | frank | Lösung | offen => erledigt |
2017-01-08 21:47 | frank | Behoben in Version | => 2.1.4 |