いつもROM専なのですが、少々気になったことがあるので、、、

>>691,692
%gを使ったことがほとんど無かったので少々調べて見たのですが
指数が-4より小さいとき(0.00001など)は%eの表示になるのと
%.6gだと小数部6桁ではなく全体で6桁になるようです
(%sの扱いに近い? でも小数点はカウントされてない、、、)

なので、調べた小数点以下の桁数をn、値をaとして
printf("%.*f",n,a)
としたらどうでしょうか
桁数判別の方法とかは考えてないので微妙かもですが