py/formatfloat: Fix case where floats could render with negative digits.

Prior to this patch, some architectures (eg unix x86) could render floats
with "negative" digits, like ")".  For example, '%.23e' % 1e-80 would come
out as "1.0000000000000000/)/(,*0e-80".  This patch fixes the known cases.
This commit is contained in:
Damien George 2018-03-01 17:00:02 +11:00
parent 7b050fa76c
commit 955ee6477f
2 changed files with 9 additions and 1 deletions

View File

@ -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++ = '.';
}

View File

@ -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)