Re: Commifying sensibly

by gone2015 (Deacon)
 on Dec 02, 2008 at 17:34 UTC ( #727465=note: print w/replies, xml ) Need Help??

Appears not to work if there's a decimal '.' ? Or a sign ?

Just for the hell of it:

```  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 \$_ ;
} ;
gives:
```     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 :-)

Replies are listed 'Best First'.
Re^2: Commifying sensibly
by oko1 (Deacon) on Dec 04, 2008 at 01:01 UTC

Oh, well spotted!++ I was only thinking of integers. Since the whole concept is flawed, and there doesn't seem to be an obvious way to fix it, it's back to the drawing board! :)

--
"Language shapes the way we think, and determines what we can think about."
-- B. L. Whorf

Create A New User
Node Status?
node history
Node Type: note [id://727465]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (10)
As of 2018-06-20 20:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Should cpanminus be part of the standard Perl release?

Results (117 votes). Check out past polls.

Notices?