Inaccurate Float-to-Decimal Conversion in `parse_value` of `Decimal` `Scalar`

Offen
#1,593 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

@mak626 arbeitet bereits daran.

Seit 10.2.2025.

  • #1594 von @mak626 — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
55/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
python
Bereich
api

Rechercherichtung

Suchen Sie die parse_value-Implementierung des Decimal scalar im Graphene-Codebestand und vergleichen Sie ihre aktuelle Konvertierung mit der verknüpften Strawberry-Implementierung. Überprüfen Sie, dass das Parsen von 0.01 den beabsichtigten Dezimalwert bewahrt und dass ungültige Eingaben weiterhin Undefined zurückgeben; fügen Sie gezielte Tests hinzu oder aktualisieren Sie diese, falls die umgebenden Tests einen geeigneten Ort erkennen lassen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

🐛 bug

Current Behavior

The parse_value function currently converts the input using _Decimal(value). When a float is passed as input, this conversion may lead to precision loss due to the inherent imprecision of floating-point representations.

Steps to Reproduce

  1. Call Decimal.parse_value(0.01).
  2. Observe that the resulting Decimal does not accurately represent the value 0.01 instead gives0.01000000000000000020816681711721685132943093776702880859375 which is inaccurate.

Expected Behavior

The function should convert the input to a string before creating the Decimal object (i.e., using _Decimal(str(value))). This approach ensures that decimal values are accurately converted, even if not provided as string, preserving their intended precision.

see Strawberry implementation

Suggested Fix

Modify the parse_value function as follows:

@staticmethod
def parse_value(value):
    try:
        return _Decimal(str(value))
    except Exception:
        return Undefined
Vorherrschende Sprache
Python
Sterne
8.2k
Forks
823
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus graphql-python/graphene

Alle Issues in graphql-python/graphene

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.