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