Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^2: Printing a very small number

by Laurent_R (Monsignor)
on Aug 16, 2013 at 17:32 UTC ( #1049762=note: print w/ replies, xml ) Need Help??


in reply to Re: Printing a very small number
in thread Printing a very small number

print sprintf "%.15f" => $x;

While this works perfectly, this is a bit verbose IMHO. Why not simply:

printf "%.15f" => $x;

or even:

printf "%.15f", $x;


Comment on Re^2: Printing a very small number
Select or Download Code
Replies are listed 'Best First'.
Re^3: Printing a very small number
by kcott (Abbot) on Aug 17, 2013 at 05:16 UTC

    The sprintf documentation contains details of the formats; these are not shown in the printf documentation. So, as it was the sprintf formatting that I was explaining, it seemed appropriate to use sprintf in my example code.

    More importantly though, I made a conscious decision to not use printf in my examples. That function has a number of gotchas which aren't specifically related to the actual formatting and which I didn't want to have to explain.

    The printf documentation is short: just three paragraphs. The first gotcha, noted in the very first sentence, has tripped you up!

    Here's what happens if I substitute my 'print sprintf' with your ("Why not simply") 'printf':

    $ perl -Mstrict -Mwarnings -le ' my $x = 9**-10; print "$x"; printf "%f" => $x; printf "%.15f" => $x; printf "%.31f" => $x; printf "%g" => $x; printf "%.15g" => $x; printf "%.31g" => $x; ' 2.86797199079244e-10 0.0000000.0000000002867970.00000000028679719907924413493062.86797e-102 +.86797199079244e-102.86797199079244134930566254989e-10$

    I'll also draw your attention to the last printf paragraph:

    "Don't fall into the trap of using a printf when a simple print would do. The print is more efficient and less error prone."

    Finally, I use "=>" insted of "," for clarity; particularly when separating different types of arguments. If you look at my posts, you'll find many examples of this kind of thing:

    sprintf FORMAT => LIST split PATTERN => STRING join STRING => LIST pack TEMPLATE => LIST

    I find it makes the code easier to read and, when necessary, easier to debug. There's a clear delineation between the first argument, which affects how the function operates, and the remaining arguments, which specify what the function operates on.

    -- Ken

      Well, thank you for your answer, Ken, I guess it is probably a matter of personal taste. Perhaps a reminiscence of my C background. However, as far as the gotchas are concerned, if you look at the one-liner in this post I made two days ago Re^2: How to calculate the sum of columns to be equal to 100?, you'll see that I did not fall in any of the two traps you're mentioning: I am using print, not printf, when I don't need specific formatting (it is actually extremely rare that I use printf), and I am adding a new line in the formatting when needed, nothing particularly complicated. As for the use of the fat comma (=>), I found it slightly distracting, I actually had to think a couple of seconds to understand its meaning in this context. But, again, maybe a prejudice due to C reminiscences on my part.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1049762]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (11)
As of 2015-07-31 11:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (276 votes), past polls