summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--py/formatfloat.c6
-rw-r--r--tests/float/float_format.py4
2 files changed, 9 insertions, 1 deletions
diff --git a/py/formatfloat.c b/py/formatfloat.c
index 60dcee6f54..dc7fc1d1fd 100644
--- a/py/formatfloat.c
+++ b/py/formatfloat.c
@@ -330,7 +330,11 @@ int mp_format_float(FPTYPE f, char *buf, size_t buf_size, char fmt, int prec, ch
// Print the digits of the mantissa
for (int i = 0; i < num_digits; ++i, --dec) {
int32_t d = (int32_t)f;
- *s++ = '0' + d;
+ if (d < 0) {
+ *s++ = '0';
+ } else {
+ *s++ = '0' + d;
+ }
if (dec == 0 && prec > 0) {
*s++ = '.';
}
diff --git a/tests/float/float_format.py b/tests/float/float_format.py
index cda395ce02..d43535cf2f 100644
--- a/tests/float/float_format.py
+++ b/tests/float/float_format.py
@@ -13,3 +13,7 @@ for prec in range(8):
# check certain cases that had a digit value of 10 render as a ":" character
print('%.2e' % float('9' * 51 + 'e-39'))
print('%.2e' % float('9' * 40 + 'e-21'))
+
+# check a case that would render negative digit values, eg ")" characters
+# the string is converted back to a float to check for no illegal characters
+float('%.23e' % 1e-80)