Python, 127 bytes
=

After deleting my 1st answer (sry!) which could not handle small numbers due to machine epsilon issues, I found a different solution. It handles float as well as integers, and is written as function.

Golfed:

    def f(x):z=[c for c in x]+["."];i=z.index(".");del z[i];print"+".join([str(int(o)*10**(i-j-1))for j,o in enumerate(z)if o>"0"])

Ungolfed:

    def f(x):
      z=[c for c in x]+["."]  # The additional dot is needed for integers. 
      i=z.index(".")
      del z[i]
      print "+".join([str(int(o)*10**(i-j-1)) for j,o in enumerate(z) if o>"0"])

Usage:

    >>> f("32.009")
    30+2+0.009

    >>> f("100020003000009000000.0009")
    100000000000000000000+20000000000000000+3000000000000+9000000+0.0009