Open
Description
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 value0.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.
Suggested Fix
Modify the parse_value
function as follows:
@staticmethod
def parse_value(value):
try:
return _Decimal(str(value))
except Exception:
return Undefined
Activity