in reply to Re: Can sprintf suppress leading zero for float < 1?
in thread Can sprintf suppress leading zero for float < 1?

That doesn't output .123.

Replies are listed 'Best First'.
Re^3: Can sprintf suppress leading zero for float < 1?
by ww (Archbishop) on Apr 15, 2012 at 01:47 UTC
    No, it doesn't.

    As posted, it outputs:

    $str: .123456

    when executed on Win7 with 5.014:

    This is perl 5, version 14, subversion 2 (v5.14.2) built for MSWin32-x +86-multi-thread (with 1 registered patch, see perl -V for more detail) Copyright 1987-2011, Larry Wall Binary build 1402 [295342] provided by ActiveState http://www.ActiveSt +ate.com Built Oct 7 2011 15:49:44

    Update: Head slap moment!

    Are you getting a different output? If so, with which perl version?

    No it doesn't. Truncating the original value is left as an exercise (already solved) by OP. So...

    #!/usr/bin/perl use 5.014; # 964932 my $str; my $val = 0.123456; my $fmt = '%.3f'; my $val_trunc = sprintf $fmt, $val; ($str = $val_trunc ) =~ s/^0//; say "\$str: $str";

    Output: $str: .123

      Truncating the original value is left as an exercise (already solved) by OP.

      Except the OP used sprintf and your whole point was he shouldn't use sprintf here. Or does "don't use (s)printf when print would do" mean something else?

      Need to handle negative numbers as well. How about this?

      #!/usr/bin/perl my $value = .23456; my $formatted = sprintf("%.3f", $value); $formatted =~ s/([^0-9])0\./$1./; print "$value => $formatted\n"; $value = $formatted = -.23456; $formatted = sprintf("%.3f", $value); $formatted =~ s/([^0-9])0\./$1./; print "$value => $formatted\n";