Erlang Central

Difference between revisions of "Commas in Numbers"

From ErlangCentral Wiki

(ah, I put this first in discussion, but nevermind: I hate the given solution. Also, they aren't "Perl-compatible regular expressions".)
m
Line 36: Line 36:
  
 
[[Category:CookBook]][[Category:StringRecipes]][[Category:ListRecipes]][[Category:NumberRecipes]]
 
[[Category:CookBook]][[Category:StringRecipes]][[Category:ListRecipes]][[Category:NumberRecipes]]
 +
 +
 +
 +
[http://www.magical-casino.com/casino_games.html Casino games.]
 +
[http://www.gambling-online-theory.com/casinos/on-line-casinos.html on line casinos]
 +
[http://www.gambling-online-theory.com/online-casino/online-casino-for-cash.html online casino for cash]
 +
[http://www.magical-casino.com/casino_games.html Casino games.]
 +
[http://www.casino-theory.com/online-casino-bonus/free-online-casino-tournament.html free online casino tournament]
 +
[http://www.casinos-go.com/online-casino-tips/online-casino-games.html online casino games]
 +
[http://www.magical-casino.com/security.html Casinos security online.]
 +
[http://www.magical-casino.com/casino_risk.html Gambling Online - Risks.]
 +
[http://www.gambling-online-theory.com/casinos/fun-casinos.html fun casinos]
 +
[http://www.gambling-online-theory.com/casinos-portal/free-casinos-on-line.html free casinos on line]

Revision as of 00:24, 23 November 2006

Problem

You need to format a number for printing with commas (or other locale-dependant marks) in the appropriate places. This is important for creating human-legible print copies of reports.

Solution

Turn the number into a list and then use pattern-matching to insert commas where needed.

partition_integer(N,P) ->
    partition_integer(lists:reverse(integer_to_list(N)),P,[]).

partition_integer([A,B,C,D|T],P,Acc) ->
    partition_integer([D|T],P,[P,C,B,A|Acc]);
partition_integer(L,_,Acc) ->
    lists:reverse(L) ++ Acc.

Floating-point numbers generally require additional separator, and also an explicit fractional-part length:

partition_float(N,P,FP,L) ->
    F = tl(tl(hd(io_lib:format("~.*f",[L,N-trunc(N)])))),
    lists:flatten([partition_integer(trunc(N),P),FP,F]).

Here's an example of the above in action:

1> partition_integer(1918928282, $,).
"1,918,928,282"
2> partition_integer(1982928828, $'). 
"1'982'928'828"
3> partition_float(1982928828.12345, $', $., 6).
"1'982'928'828.123450"


Casino games. on line casinos online casino for cash Casino games. free online casino tournament online casino games Casinos security online. Gambling Online - Risks. fun casinos free casinos on line