Thanks. I noticed the bugs later. But after talking with my boss, he suggested something more elegant (again *untested*, yet):

import locale

def number_format(num, places=0)
   """Format a number according to locality and given places"""
   locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()[0])
   return locale.format("%.*f", (places, num), 1)

[EMAIL PROTECTED] wrote:
Your code has a little bug, I highly recommend to add a test to your
code, for an idea see below - I fixed your code as well.

#!/usr/bin/env python
import math

def number_format(num, places=0):
    """Format a number with grouped thousands and given decimal
places"""
    #is_negative = (num < 0)
    #if is_negative:
    #    num = -num

    places = max(0,places)
    tmp = "%.*f" % (places, num)
    point = tmp.find(".")
    integer = (point == -1) and tmp or tmp[:point]
    decimal = (point != -1) and tmp[point:] or ""

    count = commas = 0
    formatted = []
    for i in range(len(integer) - 1, 0, -1):
        count += 1
        formatted.append(integer[i])
        if count % 3 == 0:
            formatted.append(",")
    formatted.append(integer[0]) # this misses in your part
    integer = "".join(formatted[::-1])
    return integer+decimal


#
# add something like this: it helps to prevent you break your code
#
import unittest

class test_number_format(unittest.TestCase):
    def test(self):
        self.assertEqual(number_format(1000000, 2), '1,000,000.00')
        self.assertEqual(number_format(100000, 2), '100,000.00')
        self.assertEqual(number_format(100, 2), '100.00')
        self.assertEqual(number_format(1000000.33, 2), '1,000,000.33')
        self.assertEqual(number_format(1000000.333, 2), '1,000,000.33')
        self.assertEqual(number_format(1000000.3, 2), '1,000,000.30')
        self.assertEqual(number_format(123456, 2), '123,456.00')
        self.assertEqual(number_format(12345, 2), '12,345.00')
        self.assertEqual(number_format(123, 2), '123.00')
        self.assertEqual(number_format(123456.33, 2), '123,456.33')
        self.assertEqual(number_format(12345.333, 2), '12,345.33')
        self.assertEqual(number_format(123.3, 2), '123.30')

suite = unittest.makeSuite(test_number_format)
unittest.TextTestRunner(verbosity=2).run(suite)

begin:vcard
fn:Edward Hartfield
n:Hartfield;Edward
org:BungeeCraft Technologies
adr;dom:;;4824 W Medford Avenue;Milwaukee;Wisconsin;53216
email;internet:[EMAIL PROTECTED]
title:President
tel;work:414 839-2387
tel;fax:414 449-9105
note:Milwaukee-based BungeeCraft Technologies provides cost-effective technology solutions for small and mid-sized businesses. From aligning our clients' business and IT strategies to improving business processes and deploying and supporting solutions that accelerate business results, we are able and ready to provide YOU with comprehensive information technology solutions and services.
x-mozilla-html:FALSE
url:http://www.bungeecraft.com
version:2.1
end:vcard

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to