Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Sep 2004 21:56:38 +0200
From:      Stefan Farfeleder <stefan@fafoe.narf.at>
To:        Steve Kargl <sgk@troutmask.apl.washington.edu>
Cc:        freebsd-standards@freebsd.org
Subject:   Re: is printf() broken?
Message-ID:  <20040905195632.GG72545@wombat.fafoe.narf.at>
In-Reply-To: <20040905193640.GA37190@troutmask.apl.washington.edu>
References:  <20040905193640.GA37190@troutmask.apl.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Sep 05, 2004 at 12:36:40PM -0700, Steve Kargl wrote:
> The following program
> 
> #include <stdio.h>
> int main(void) {
> 	int d;
> 	double x;
> 	x = 1.234E05;
> 	for (d = 0; d < 5; d++)
>     	printf("%+-31.*e\n", d, x);
> 	return 0;
> }
> 
> generates
> 
> +1e+05                         
> +1.2e+05                       
> +1.23e+05                      
> +1.234e+05                     
> +1.2340e+05                    
> 
> The question is whether the first number should be
> "+1.e+05".  That is, is the printing of the decimal
> point required or optional?  I only have Harbison
> and Steele's book and it does not state what the 
> expected behavior should be.

The output is correct:

e, E   A double argument representing a floating-point number is converted in the
       style [-]d.ddd eħdd, where there is one digit (which is nonzero if the
       argument is nonzero) before the decimal-point character and the number of
       digits after it is equal to the precision; if the precision is missing, it is taken as
       6; if the precision is zero and the # flag is not specified, no decimal-point
       character appears. The value is rounded to the appropriate number of digits.
[...]

Cheers,
Stefan



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040905195632.GG72545>