他の方も書かれていますが計算精度の問題とlongとfloatの文字列化手法の違いの問題です。
例えば最初の代入を
logn d = 1234567L;
とすればどちらも同じような表示になるでしょう。
また、
long d = 12345678L; //8までね
float e = d;
System.out.printf(\u0026quot;%d\
\u0026quot;, d);
System.out.printf(\u0026quot;%f\
\u0026quot;, e);
とした場合も同じ感じ。
ただし、最初の代入を123456789Lとすると、変んな値が出てきます。
これは、コンピュータにおけるデータの持ち方が2進数なので、少数以下の値は10進数とは違ってくるためです(なおこれで正常動作)。