Formatting a numerical string w/commas

bjorn bjorn at roguewave.com
Tue Feb 22 17:41:45 EST 2000


The only problem with these kinds of approaches, is that you are trying to
reimplement locale dependent formatting by hand (and most approaches assume
everyone is using the us locale :-)

-- bjorn
ps: as far as the coding style, the only suggestion I have would be to put
the function comment in a doc string...

Timothy Grant wrote:

> I've seen some traffic on this formatting numbers, and recently had to
> format and deformat some number for a Tkinter app I was writing, so I
> wrote to fairly generic functions for doing so.
>
> This is the first time I've ever posted *real* code on the list so
> please be gentle, but constructive criticism, especially about style, is
> always welcome.
>
> ############################################################
> #
> # Name: commanumber()
> #
> # Purpose:  To format a number with commas and possibly a
> #           dollar sign.
> #
> # Arguments:    n  = the number to be converted
> #               dp = number of decimal places (defaults to 2)
> #               ds = dollar sign (1|0) (defaults to $)
> #
> def commanumber(n, dp=2, ds=1):
>
>     if not n:
>         return ''       # If None then bail out here
>
>     if type(n) == type('x'):
>         if n == '':
>             return ''   # If an empty string then bail out here.
>         n = string.atof(n)
>
>     m = '%0.*f' % (dp, n)
>
>     d = string.split(m, '.')    # Split at the decimal point
>     r = list(d[0])
>
>     # It looks ugly but it really isn't. A couple of really nice
> Pythonisms
>     # make it work right. The first is list insertion, and the second is
> integer
>     # division.
>     #
>     # the insertion point is calculated based on the counter item, plus
> the a left
>     # shift for each ',' already inserted the ((x/3)-1)
>     #
>     for x in range(3, len(r), 3):
>         r[(x+((x/3)-1))*(-1):(x+((x/3)-1))*(-1)] = [',']
>
>     if ds:
>         s = '$'
>     else:
>         s = ''          # Rebuild the string from the list
>
>     for i in r:
>         s = s + i
>
>     if len(d) == 2: # Check to see if we have a decimal portion to add
>         return s + '.' + d[1]
>     else:
>         return s
>
>
> ############################################################
> #
> # Name: stripfmt()
> #
> # Purpose:  Strip all formatting from a prettified number
> #
> # Arguments:    n = the number to strip
> #
> def stripfmt(n):
>     n = string.replace(n, ',', '')  #remove commas
>     n = string.replace(n, '$', '')  #remove dollar signs.
>     return n
>
> --
> Stand Fast,
>     tjg.
>
> Chief Technology Officer              tjg at exceptionalminds.com
> Red Hat Certified Engineer            www.exceptionalminds.com
> Avalon Technology Group, Inc.                   (503) 246-3630
> >>>>>>>>>>>>Linux...Because rebooting isn't normal<<<<<<<<<<<<
>
> --
> http://www.python.org/mailman/listinfo/python-list





More information about the Python-list mailing list