Appears not to work if there's a decimal '.' ? Or a sign ?
Just for the hell of it:
gives:use strict ; use warnings ; foreach my $t (1234567, 123.4567, -123456, .123456, '.1234567', -10* +*1000) { printf "%12s -> oko1:%12s, faq:%12s\n", $t, commify($t), commify_f +aq($t) ; } ; sub commify { my ($s) = @_ ; my @list = () ; my $c = 0 ; for (reverse split //, $s){ unshift @list, $c++ % 3 || $c == 1 ? $_ : "$_,"; } ; return join '', @list ; } ; sub commify_faq { local $_ = shift ; 1 while s/^([-+]?\d+)(\d{3})/$1,$2/ ; return $_ ; } ;
1234567 -> oko1: 1,234,567, faq: 1,234,567
123.4567 -> oko1: 12,3.4,567, faq: 123.4567
-123456 -> oko1: -,123,456, faq: -123,456
0.123456 -> oko1: 0.,123,456, faq: 0.123456
.1234567 -> oko1: .1,234,567, faq: .1234567
-inf -> oko1: -,inf, faq: -inf
which, from a pedagogical stand point, may be useful in itself :-)
In reply to Re: Commifying sensibly
by gone2015
in thread Commifying sensibly
by oko1
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |