-
Notifications
You must be signed in to change notification settings - Fork 205
Closed
Labels
bugan unexpected problem or unintended behavioran unexpected problem or unintended behavior
Milestone
Description
Development version allow for formatting similar to Python floats, including same format specifiers (i.e. 'f' or 'e'). Though, this introduced an incompatibility in case when the format specifier is missing.
On v1.3.0:
>>> from mpmath import *
>>> x = mpf(pi)
>>> f"{x}"
'3.14159265358979'
>>> f"{x!s}"
'3.14159265358979'
>>> f"{x!r}"
"mpf('3.1415926535897931')"
>>> f"{x!a}"
"mpf('3.1415926535897931')"
>>> f"{x=}"
"x=mpf('3.1415926535897931')"In the master:
>>> from mpmath import *
>>> x = mpf(pi)
>>> f"{x}" # (!)
'3.1415926535897931'
>>> f"{x!s}"
'3.14159265358979'
>>> f"{x!r}"
"mpf('3.1415926535897931')"
>>> f"{x!a}"
"mpf('3.1415926535897931')"
>>> f"{x=}"
"x=mpf('3.1415926535897931')"A quick fix (not sure if it's a good idea):
diff --git a/mpmath/libmp/libmpf.py b/mpmath/libmp/libmpf.py
index 9eb24222..3ca77388 100644
--- a/mpmath/libmp/libmpf.py
+++ b/mpmath/libmp/libmpf.py
@@ -1633,7 +1633,7 @@ def format_digits(num, format_dict, prec):
strip_last_zero = True
if precision < 0:
- precision = repr_dps(prec)
+ precision = prec_to_dps(prec)
if precision == 0:
precision = 1
The problem is that it breaks float(format(x)) == float(format(float(x))) invariant.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugan unexpected problem or unintended behavioran unexpected problem or unintended behavior