I hesitated posting this at first because I felt that the 'sprintf "%.3g", $string;' solution already proposed was cleaner.

However, the behavior where 'g' suppresses trailing floating-point zeros seems to not be documented in the POD, which leads me to believe it's a compiler-dependant behavior (dependant on the compiler on which Perl was built) rather than clearly defined Perl behavior.

Of course someone else also already suggested a my $val = +sprintf "%.3f", $string; solution, which also will suppress trailing zeros. That also seemed pretty neat, as it relies on the fact that the + operator forces string-to-number coersion, which causes trailing zeros to be forgotten. ...a great solution.

However, if it turns out that 'g' suppressing trailing fp zeros is undefined (and possibly unreliable) behavior, and if for some reason you choose not to take advantage of Perl's ability to coerce strings into numeric values easily, the following solution may have merit instead.

use strict; use warnings; use Math::Round; my $test_value = 100.510; $test_value = fp_round( $test_value, 3 ); print "$test_value\n"; sub fp_round { my ( $val, $places ) = @_; return round( $val * ( 10 ** $places ) ) / ( 10 ** $places ); }

...Just another way to do it, I suppose.

All the OP is really trying to do is just round to a specific number of floating point places. Math::Round will round to the nearest integer. But that's easy to improve upon with a little math, as demonstrated in my snippet.


Dave


In reply to Re: Deleting trailing 0's after using sprintf by davido
in thread Deleting trailing 0's after using sprintf by Popcorn Dave

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.