Probleme mit Null

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

In meinen neuen Aufgaben zu negativen Zahlen, ist es jetzt möglich, dass als Ergebnis Null herauskommt. Die wird aber von meinem Kontrollalgorithmus nicht akkzeptiert. Bei der Aufgabenstellung wird das Ergebnis (wie alles andere auch ) in der Tabelle "Protokoll" gespeichert. bei den negativen Zahlen kommen nur entweder ganze Zahlen vor oder Kommazahlen mit Zehnteln und die schicke ich auch ans Protokoll, bei der Kontrolle wird der Wert aus dem Protokoll geholt und mit der Eingabe verglichen und da kommt der Wert 0E-7 zurück und dieser ist angeblich nicht gleich 0.
Hier wird der Wert an das Protokoll geschickt:

Code: Alles auswählen

            print("Ergebnis: ", ergebnis)
            protokoll = Protokoll.objects.create(
                user = user, titel = titel, sj = user.sj, hj = user.hj, kategorie = kategorie, text = text, pro_text = pro_text, variable = variable, frage = frage, einheit = einheit, 
                anmerkung = anmerkung, wert = ergebnis, loesung = lsg, hilfe_id = hilfe_id, parameter = parameter, wertung = "a", typ = typ, typ2 = typ2, aufgnr = zaehler.aufgnr,        
            ) 
... hier wird er wieder ausgelesen und an die Kontrolle geschickt:

Code: Alles auswählen

                print("P_Wert: ",protokoll.wert)
                wertung, rueckmeldung = kontrolle(eingabe, protokoll.wert, protokoll.loesung, protokoll.id)
und hier kontrolliert:

Code: Alles auswählen

                print("P_Wert: ",protokoll.wert)
                wertung, rueckmeldung = kontrolle(eingabe, protokoll.wert, protokoll.loesung, protokoll.id)
Die Ausgabe:

Code: Alles auswählen

Ergebnis:  0.0
[20/Aug/2023 12:03:49] "GET /negative-zahlen/ HTTP/1.1" 200 2320
P_Wert:  0E-7
Wert: 0E-7  ?=  0
False
und mein Feld im Protokoll:

Code: Alles auswählen

    wert = models.DecimalField('Wert', null=True, max_digits=20, decimal_places=7)
Sirius3
User
Beiträge: 17792
Registriert: Sonntag 21. Oktober 2012, 17:20

Bei mir ist der Wert 0:

Code: Alles auswählen

In [1]: import decimal

In [2]: wert = decimal.Decimal("0E-7")

In [3]: str(wert)
Out[3]: '0E-7'

In [4]: wert == 0
Out[4]: True
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

Eieiei, das Problem war nicht der Wert, der vom Protokoll zurückgegeben wurde, sondern der aus der Eingabeformular:

Code: Alles auswählen

        print("Wert:", wert, " ?= " , eingabe)
        print(decimal.Decimal(eingabe) == wert)
Ausgabe:

Code: Alles auswählen

Wert: 0E-7  ?=  0
True
Jetzt klappt es! vielen Dank !
Antworten