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

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

Replies are listed 'Best First'.
Re^4: Can sprintf suppress leading zero for float < 1?
by ikegami (Patriarch) on Apr 17, 2012 at 06:09 UTC

    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?

Re^4: Can sprintf suppress leading zero for float < 1?
by Anonymous Monk on Jun 20, 2012 at 23:23 UTC

    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";