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