0

Ninox Bug bei der Addition?

Ich habe eine TABELLE2, die ein Feld ERSTATTET enthält. ERSTATTET enthält typische Geld-Angaben, z.B. 123,33.

TABELLE2 ist Untertabelle einer TABELLE1. In TABELLE1 benötige ich die Summe der Erstattungen aller der untergeordneten Datensätze zum Eintrag in TABELLE1 und habe die wie folgt berechnet:

let me := this;

sum(select TABELLE2 where TABELLE1  = me).erstattet)

Da alle Geld-Angaben wie oben dargestellt erfolgten, hätte ich als Ergebnis der Formel auch ein solches Format erwartet. Tatsächlich gibt es aber ab ca. der 10. Nachkommastelle Abweichungen, z.B. 142,410000000000829.

Interessant ist: Den Mechanismus verwende ich auch an einer anderen Stelle der gleichen Datenbank. Da funktioniert es. 

Habt Ihr eine Idee, wo der Gedankenfehler liegt? Oder ist das ein Bug?

6 Antworten

null
    • picaflor_libre
    • vor 2 JahrenMon, August 8, 2022 at 8:18 PM UTC
    • Gemeldet - anzeigen

    Ich kann Dir dieses Verhalten bestätigen.

    In er gleichen Tabelle kann es vorkommen, dass ein Feld solche Abweichungen nach einer Addition aufweist, während das gleiche Feld im nächsten Datensatz stimmt.

    Für mich sieht es so aus, als wären alle Datenbanken davon betroffen.

    • Josef_Koenig
    • vor 2 JahrenMon, August 8, 2022 at 8:50 PM UTC
    • Gemeldet - anzeigen

    Möglicherweise handelt es sich hier um einen Rundungsfehler:
    http://www.dorn.org/uni/sls/kap01/a03_04ra.htm
    https://wiki.selfhtml.org/wiki/Programmiertechnik/Rechnerarithmetik#Ausl.C3.B6schung

    • Matthias_B
    • vor 2 JahrenTue, August 9, 2022 at 3:06 PM UTC
    • Gemeldet - anzeigen

    Bei einer einfachen Addition gibt's keine Rundungsfehler. Dafür braucht es schon andere Funktionen (z.B. Division). Da stellt sich die Frage, wie Ninox addiert. Und welche Auswirkungen das hat. Eine einfache Vergleichsoperation ( if a = b then ... ) liefert zumindest nicht die erwarteten Ergebnisse.

    • mirko3
    • vor 2 JahrenTue, August 9, 2022 at 6:37 PM UTC
    • Gemeldet - anzeigen

    Es sind die Tücken der Gleitkommazahl und betrifft diverse Programmiersprachen und alle Rechenoperationen (siehe Beispiel). Es wurde hier vor kurzem auch recht ausführlich besprochen. Eine Suche unter "Rundungsfehler in Programmiersprachen" brachte mir Erkenntnis, ohne es vollumfänglich zu verstehen. Pragmatischer Ansatz: in Funktionsfeldern kann man sich durch konsequentes Runden behelfen, in der Summenfunktion der Tabellenansicht hilft leider nichts. Mirko
     

    let c := 0.09 / 0.2;
    let d := 0.1 + 0.2;
    let e := 0.4 - 0.1;
    let f := 0.1 * 0.2;
    let h := round(0.09 / 0.2, 4);
    let i := round(0.1 + 0.2, 4);
    let j := round(0.4 - 0.1, 4);
    let k := round(0.1 * 0.2, 4);
    c + " / " + d + " / " + e + " / " + f + " / " + h + " / " + i + " / " + j + " / " + k
    
    • Matthias_B
    • vor 2 JahrenWed, August 10, 2022 at 9:52 AM UTC
    • Gemeldet - anzeigen

    Ich bin dennoch beunruhigt. Bei der Addition simpler Zahlen Rechenfehler zu machen hebt nicht gerade mein Vertrauen in eine Software, mit der man angeblich sein eigenes ERP bauen kann. Und wieviel Zeit habe ich verdödelt, weil ich nach Fehlern gesucht habe, die nicht meine waren. Meine Erwartung ist zumindest, dass Ninox die Sache Ernst nimmt. Mit "konsequentem Runden" ist das nicht getan.

    Andererseits bin ich ein Ninox-Fan. Deswegen hier eine Beispieldatenbank, die ich mal extrahiert habe. Dann wird's konkreter. Vielleicht lässt sich das Problem ja doch lösen.

    • Maurice
    • vor 2 JahrenWed, August 10, 2022 at 10:46 AM UTC
    • Gemeldet - anzeigen

    Den von Mirko erwähnten Thread findest du hier:

    https://forum.ninox.de/t/h7hw24y

Content aside

  • vor 2 JahrenWed, August 10, 2022 at 10:46 AM UTCZuletzt aktiv
  • 6Antworten
  • 115Ansichten
  • 5 Folge bereits