in reply to Formatting a number
use strict; use warnings; printf qq{%20s\n}, comma3($_) for (12, 1234, 1234567, 1234567890); sub comma3 { my $ct = 0; join q{}, reverse map {++ $ct % 3 ? $_ : ($_, q{,})} reverse split m{}, $_[0]; }
produces
12 1,234 1,234,567 1,234,567,890
Cheers,
JohnGG
Update: Subroutine was erroneously putting commas at the front of numbers with lengths divisble by three, thanks jwkrahn for pointing this out. Revised subroutine (which is, of course, even slower) below
sub comma3 { my $ct = 0; my $len = length $_[0]; return join q{}, reverse map { ++ $ct % 3 ? $_ : $ct == $len ? $_ : ($_, q{,}) } reverse split m{}, $_[0]; }
Benchmarks will be updated in a bit.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Formatting a number
by jwkrahn (Abbot) on Oct 16, 2006 at 19:09 UTC | |
by johngg (Canon) on Oct 16, 2006 at 21:49 UTC |