Если тип double может обрабатывать числа 4.35 и 435, почему 4.35 * 100 соответствует 434.99999999999994? [Дубликат]

На этот вопрос уже есть ответ:

Математика с плавающей точкой нарушена? 28 ответов Крутая странность - что особенного в «100»? 2 ответа

Как я понимаю, некоторые числа не могут быть представлены с точностью в двоичном виде, и поэтому арифметика с плавающей точкой иногда дает нам неожиданные результаты; как 4,35 * 100 = 434,9999999999994. Нечто похожее на то, что происходит с 1/3 в десятичном виде.

Это имеет смысл, но это вызывает другой вопрос. Кажется, что в двоичном виде и 4.35 и 435 могут быть представлены с точностью. Вот тогда это перестает иметь смысл для меня. Почему 4,35 * 100 соответствует 434,999999999999994? 435 и 4.35 имеют точное представление в динамике двойного типа:

double number1 = 4.35;
double number2 = 435;
double number3 = 100;
System.out.println(number1); // 4.35
System.out.println(number2); // 435.0
System.out.println(number3); // 100.0
// So far so good. Everything ok. 

System.out.println(number1 * number3); // 434.99999999999994 !!!
// But 4.35 * 100 evaluates to 434.99999999999994

Зачем

Редактировать: этот вопрос был отмечен как дубликат, и это не так. Как вы можете видеть из принятого ответа, моя путаница заключалась в несоответствии между фактическим значением и напечатанным значением.

Ответы на вопрос(4)

Ваш ответ на вопрос