Number Format function

wittempj@hotmail.com martin.witte at gmail.com
Wed Feb 8 15:29:05 EST 2006


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)




More information about the Python-list mailing list