dc - 75 chars
A7 1:U77 2:U71 3:U84 4:U80 5:U69 6:U[3+r1-r]sJ?sddZd3~d0=Jrsp-Ar^ldk/nlp;UP
Uses Z (number of digits) %3 to find the unit. Most of the code is for setting the units character array, the real code is 39 chars. The J macro adjusts when %3 equals 0, to avoid printing 0.918M in the 7th. test case. It doesn't round properly.
If you speak dc, feel free to improve it.