Я понимаю, что десятичное число может быть только настолько точным, чтобы сохранить его как число с плавающей запятой в двоичной системе, но чего я не понимаю, так это того, что происходит с 7-м десятичным знаком в моем выводе 10 / 7.
В моем первом тесте результатов я заметил, что 5 (7-е место) в конце числа с плавающей запятой против 4 (7-е место), за которым следует 2 в двойном. Я бы подумал, что 7-е место в поплавке будет 4, так как 8-е место в двойном случае - 2.
Float 1.4285715 Double 1.4285714285714286
Затем я провел следующий тест вывода, используя формат с плавающей запятой для 17 позиций. 8-е место в каждом из них разное - число с плавающей запятой равно 6, поэтому 7-е место округляется до 5, как я полагаю.
Поплавок 1.428571462631225600 Double 1.428571428571428600
В третьем тесте вывода я попытался выполнить прямое приведение в строковом формате, чтобы посмотреть, что произойдет. Получил те же результаты, что и второй тест.
Если у меня есть упрощенный вопрос к сложному методу хранения с плавающей запятой - прошу прощения.
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
*/