simple spamy fix for float serialisation

this is my first attempt to resolve this issue (I should try to making
something a little nicer and less spamy) ... basically it uses %g not %f
so we can go to scientific notation, but also sets the precision to 17
significant figures (spamy part) which according to some randoms here:

 http://stackoverflow.com/questions/4738768/printing-double-without-losing-precision

will ensure precision ... it seems to work and I have tried to add some
unit tests to catch edge issues, but I cannot find a float (or floating
point calculation) that is tripped up when I change the precision down
to 16, but it does fail for %f and precision <= 6

Ideally I would implement the solution of trying higher and higher
precisions for the number until it de-serialises back to the number we
put in, but thats another patch :)