Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

A bug of sprintf or not?

by pysome (Scribe)
on Oct 20, 2008 at 09:36 UTC ( #718178=perlquestion: print w/replies, xml ) Need Help??

pysome has asked for the wisdom of the Perl Monks concerning the following question:

I found a odd question when i wanna round a float number
with Perl buildin function "sprintf" my code is
use warnings; use strict; my $price1 = sprintf("%.1f",100.550); my $price2 = sprintf("%.0f",100.50); print "$price1\n"; # price1 has rounded print "$price2\n"; # but price2 hasn't , Why?
Of course, i can use the manual round function like some referrence:
sub round { my $f = @_; return int($f + .5); }
But the question is Why $price1 has been rounded and price2 has not been rounded?

Replies are listed 'Best First'.
Re: A bug of sprintf or not?
by ikegami (Patriarch) on Oct 20, 2008 at 10:20 UTC
    Anonymous Monk is mistaken. This isn't a precision issue. It's banker's rounding.
    printf("%.0f\n", 100.5); # 100 printf("%.0f\n", 101.5); # 102 printf("%.0f\n", 102.5); # 102 printf("%.0f\n", 103.5); # 104 printf("%.0f\n", 104.5); # 104 printf("%.0f\n", 105.5); # 106

    Note that all those numbers (but not 100.55) can be represented precisely in floats (0.5 = 2-1).

    A reply falls below the community's threshold of quality. You may see it by logging in.
Re: A bug of sprintf or not?
by Anonymous Monk on Oct 20, 2008 at 10:02 UTC

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://718178]
Approved by Corion
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (4)
As of 2023-06-07 12:27 GMT
Find Nodes?
    Voting Booth?
    How often do you go to conferences?

    Results (29 votes). Check out past polls.