fix ecvt/fcvt decimal point position output
authorRich Felker <dalias@aerifal.cx>
Wed, 7 Aug 2013 15:14:45 +0000 (11:14 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 7 Aug 2013 15:14:45 +0000 (11:14 -0400)
these functions are obsolete and have no modern standard. the text in
SUSv2 is highly ambiguous, specifying that "negative means to the left
of the returned digits", which suggested to me that 0 would mean to
the right of the first digit. however, this does not agree with
historic practice, and the Linux man pages are more clear, specifying
that a negative value means "that the decimal point is to the left of
the start of the string" (in which case, 0 would mean the start of the
string, in accordance with historic practice).

src/stdlib/ecvt.c

index 48e70cd868a7fc9602fbce8ab9d17538f05a60b8..79c3de63debfde0edb068f24bf6e10fd323f3c47 100644 (file)
@@ -13,7 +13,7 @@ char *ecvt(double x, int n, int *dp, int *sign)
        for (j=0; tmp[i]!='e'; j+=(tmp[i++]!='.'))
                buf[j] = tmp[i];
        buf[j] = 0;
-       *dp = atoi(tmp+i+1);
+       *dp = atoi(tmp+i+1)+1;
 
        return buf;
 }