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 1 Jahr
    • 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 1 Jahr
    • 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 1 Jahr
    • 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 1 Jahr
    • 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 1 Jahr
    • 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 1 Jahr
    • Gemeldet - anzeigen

    Den von Mirko erwähnten Thread findest du hier:

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

Content aside

  • vor 1 JahrZuletzt aktiv
  • 6Antworten
  • 105Ansichten
  • 5 Folge bereits