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) -- http://mail.python.org/mailman/listinfo/python-list