Perl help

Bob Bell bbell at hp.com
Tue Jul 22 17:38:15 EDT 2003


On Tue, Jul 22, 2003 at 04:19:17PM -0400, Cole Tuininga <colet at code-energy.com> wrote:
> However, I'm extremely confused by the following:
> 
> egon at trogdor:~$ perl -e 'print sprintf( "%.2f\n", 0.565 )'
> 0.56
> 
> Can anybody explain why this is not rounding up?  Thanks in advance...

First of all, I don't know why the code isn't simply:
    $ perl -e 'printf("%.2f\n", 0.565)'
    0.56

or why perl necessarily needs to be part of the solution:
    $ printf "%.2f\n" 0.565
    0.56
[ The printf command is part of the Single Unix Spec V2 (aka UNIX98) ]

I dug around in the C99 standard, and couldnt't find this referenced
anywhere.  Additionally, I tried playing with more precision, and
turned up the following:
    $ perl -e 'printf "%.19f -> %.2f\n", $_, $_ for qw/0.005 0.015 0.025 0.035 0.045/'
    0.0050000000000000001 -> 0.01
    0.0149999999999999990 -> 0.01
    0.0250000000000000010 -> 0.03
    0.0350000000000000030 -> 0.04
    0.0449999999999999980 -> 0.04

So I think it's all about the precision of the number as stored as in
its binary representation.

-- 
Bob Bell <bbell at hp.com>
-------------------------------------------------------------------------
 "Testing shows the presence, not the absence, of bugs."
   -- Edsger W. Dijkstra, University of Texas



More information about the gnhlug-discuss mailing list