http://qs321.pair.com?node_id=11123200


in reply to Re: int() function
in thread int() function

Not that it's of great importance, but is there a reason that you've chosen to use "%.100f" formatting instead of "%.100g" formatting ?
The "%.100g" formatting should remove any trailing zeros, thereby alleviating the need for the regex.

I know that, on some systems, %g formatting can be buggy, but I don't know of any system where "%.100g" misbehaves && "%.100f" functions correctly.

Cheers,
Rob

Replies are listed 'Best First'.
Re^3: int() function
by jszinger (Scribe) on Oct 27, 2020 at 15:43 UTC
    On my CentOS 7 box with perl-5.16.3
    $ perl -E'say sprintf("%.100g", 0.15)' 0.14999999999999999 $ perl -E'say sprintf("%.100f", 0.15)' 0.14999999999999999444888487687421729788184165954589843750000000000000 +00000000000000000000000000000000 $ perl --version | head -3 This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-li +nux-thread-multi (with 40 registered patches, see perl -V for more detail)
    On my Fedora 32 box with perl-5.30.3
    $ perl -E'say sprintf("%.100g", 0.15)' 0.1499999999999999944488848768742172978818416595458984375 $ perl -E'say sprintf("%.100f", 0.15)' 0.14999999999999999444888487687421729788184165954589843750000000000000 +00000000000000000000000000000000 $ perl -E'say sprintf("%.100a", 0.15)' 0x1.333333333333300000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000p-3 $ perl -v|head -3 This is perl 5, version 30, subversion 3 (v5.30.3) built for x86_64-li +nux-thread-multi (with 96 registered patches, see perl -V for more detail)
      On my CentOS 7 box with perl-5.16.3

      That's certainly one instance where you do benefit from formatting with "%.100f" instead of "%.100g".
      Thank you for pointing this out.
      Turns out that it's the same on my Ubuntu box with perl-5.18.0.
      But with perl-5.32.0 on the same box, "%.100g" formatting works fine - so, there's a change in perl's behaviour between 5.18 and 5.32.
      I would guess that "%.100g" formatting on your CentOS 7 box would also work fine on perl-5.32.

      But I should point out that, even though "%.100g" formatting works ok on Ubuntu with perl-5.32.0, "%.*g" formatting is still buggy if you request a precision in the range 18..91 (inclusive).
      $ perl -le 'printf "%.91f\n", 0.15;' 0.14999999999999999444888487687421729788184165954589843750000000000000 +00000000000000000000000 $ perl -le 'printf "%.91g\n", 0.15;' 0.14999999999999999 $ perl -le 'printf "%.92g\n", 0.15;' 0.1499999999999999944488848768742172978818416595458984375
      Cheers,
      Rob
Re^3: int() function
by ikegami (Patriarch) on Oct 30, 2020 at 11:58 UTC

    No, it's simply an oversight.