Currency format for floats?

Andrew Dalke dalke at acm.org
Thu Jun 1 23:53:06 EDT 2000


Joseph Santaniello wrote:
>Ah, yes. But I'm still missing my commas [for 23,342.40]... A nice
> clean way to do that?

I think the following is only somewhat tricky, but perhaps the
cleanest.  (Okay, there's also supposed to be a way to do this with
locale, but I don't know how.)

def dollar(f):
  if f < 0:     # pull the sign out now so I know where to stop
    sign = "-"  # when going bacwards
    f = -f
  else:
    sign = ""

  s = "%.2f" % f
  # -6 is the thousand's place  --  987654.21
  # -3 goes back 1000 at a time
  # stop at 0 instead of -1 so "999.99" doesn't lead with a ",".
  for i in range(len(s)-6, 0, -3):  # -6 is the first thousands place
    s = s[:i] + "," + s[i:]         # Go back 1000 at a time
  return sign + s

>>> for i in (0, .9, 1, 10, 99.99, 100.00, 100.0, 999.99, 1000.,
  1000.00, 1000000000L, -0.01, -0.9, -1, -99.9, -100, -999.99, -1000.00,
  -123456789):
...  print i, dollar(i)
...
0 0.00
0.9 0.90
1 1.00
10 10.00
99.99 99.99
100.0 100.00
100.0 100.00
999.99 999.99
1000.0 1,000.00
1000.0 1,000.00
1000000000L 1,000,000,000.00
-0.01 -0.01
-0.9 -0.90
-1 -1.00
-99.9 -99.90
-100 -100.00
-999.99 -999.99
-1000.0 -1,000.00
-123456789 -123,456,789.00

                    Andrew
                    dalke at acm.org






More information about the Python-list mailing list