Я понимаю, что десятичное число может быть настолько точным, если оно хранится как бинарное число в двоичной системе, но я не понимаю, что происходит в 7 десятичном знаке в моем выводе 10/7.
В моем первом выходном тесте я заметил, что 5 (7-е место) в конце поплавка v 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
*/