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
- Call
Decimal.parse_value(0.01).
- 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
Current Behavior
The
parse_valuefunction 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
Decimal.parse_value(0.01).Decimaldoes not accurately represent the value0.01instead gives0.01000000000000000020816681711721685132943093776702880859375which is inaccurate.Expected Behavior
The function should convert the input to a string before creating the
Decimalobject (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_valuefunction as follows: