10 進数は 2 進数システムで浮動小数点数として正確に格納できることはわかっていますが、10/7 の出力の小数点以下 7 桁で何が起こっているのか理解できません。
最初の出力テストで、フロートの最後の 5 (7 位) と 4 (7 位) の後に 2 が続くことに気付きました。ダブルスの 8 位は 2 なので、フロートの 7 位は 4 になると思います。
フロート 1.4285715 ダブル 1.4285714285714286
次に、float 形式を使用して次の出力テストを 17 桁まで実行しました。それぞれの 8 位は異なります。フロートは 6 であるため、7 位は 5 に丸められます。
Float 1.428571462631225600 Double 1.428571428571428600
3 番目の出力テストでは、文字列形式で直接キャストして、何が起こるかを確認しました。2回目のテストと同じ結果が得られました。
複雑な浮動小数点ストレージ メソッドに対する単純な質問がある場合は、お詫び申し上げます。
float f = 10/7f;
double d = 10/7d;
System.out.format
("Float %1s\nDouble %2s\n", f,d);
/*
* Float 1.4285715
Double 1.4285714285714286
*/
System.out.format
("Float %1$.17f\nDouble %2$.17f\n", f,d);
/*
* Float 1.428571462631225600
Double 1.428571428571428600
*/
System.out.format
("Float %1s\nDouble %2s\n", (double)f,d);
/*
* Float 1.4285714626312256
Double 1.4285714285714286
*/