size_t len;
{
int n, i;
+ int left;
if (buf == NULL)
{
return -1;
}
+ left = 0;
if (isfinite (value))
{
*sign = signbit (value) != 0;
if (ndigit < 0)
{
/* Rounding to the left of the decimal point. */
- for (i = ndigit; i < 0; i++)
- value *= 0.1;
+ while (ndigit < 0)
+ {
+ FLOAT_TYPE new_value = value * 0.1;
- ndigit = 0;
+ if (new_value < 1.0)
+ {
+ ndigit = 0;
+ break;
+ }
+
+ value = new_value;
+ ++left;
+ ++ndigit;
+ }
}
}
else
buf[n - (i - MAX (*decpt, 0))] = '\0';
}
+ if (left)
+ {
+ *decpt += left;
+ if (--len > n)
+ {
+ while (left-- > 0 && n < len)
+ buf[n++] = '0';
+ buf[n] = '\0';
+ }
+ }
+
return 0;
}