graphql-python / graphql-python/graphene

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

Offen
#1,593 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
🐛 bug
Vorherrschende Sprache
Python
Sterne
8.2k
Forks
818
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

## 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 gives`0.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](https://github.com/strawberry-graphql/strawberry/blob/2af374359e9722980f5bc15b0d7158c8d54367b6/strawberry/schema/types/base_scalars.py#L25)

## Suggested Fix
Modify the `parse_value` function as follows:

```python
@staticmethod
def parse_value(value):
try:
return _Decimal(str(value))
except Exception:
return Undefined
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

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.

Bewertung

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

Neue Issues direkt in Ihr Postfach

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