Python, 121 bytes
After deleting my 1st answer (sry!) which could not handle small numbers due to machine epsilon issues, I found a different solution.
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]
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