diff --git a/newlib/libc/stdlib/ecvtbuf.c b/newlib/libc/stdlib/ecvtbuf.c index 12e8c9a92..228362e07 100644 --- a/newlib/libc/stdlib/ecvtbuf.c +++ b/newlib/libc/stdlib/ecvtbuf.c @@ -349,15 +349,10 @@ _gcvt (struct _reent *ptr, char *end; char *p; - if (invalue < 1.0) - { - /* what we want is ndigits after the point */ - p = _dtoa_r (ptr, invalue, 3, ndigit, &decpt, &sign, &end); - } - else - { - p = _dtoa_r (ptr, invalue, 2, ndigit, &decpt, &sign, &end); - } + /* We always want ndigits of precision, even if that means printing + * a bunch of leading zeros for numbers < 1.0 + */ + p = _dtoa_r (ptr, invalue, 2, ndigit, &decpt, &sign, &end); if (decpt == 9999) { @@ -383,11 +378,12 @@ _gcvt (struct _reent *ptr, if (buf == save) *buf++ = '0'; *buf++ = '.'; - while (decpt < 0 && ndigit > 0) + + /* Leading zeros don't count towards 'ndigit' */ + while (decpt < 0) { *buf++ = '0'; decpt++; - ndigit--; } /* Print rest of stuff */