Арифметика с плавающей точкой редко бывает точной. Хотя некоторые цифры, такие
как 0.5, может быть точно представлен в виде двоичного (основание 2) десятичного числа (так как
0.5 равно 2-1), другие числа, такие как 0.1, не могут быть. В результате операции с плавающей запятой могут привести к ошибкам округления, приводящим к
результат, который близок - но не равен - результат, который вы могли бы
ожидать. Например, простой расчет ниже приводит к
2.600000000000001, а не 2.6:
double s=0;
for (int i=0; i<26; i++)
s += 0.1;
System.out.println(s);
Аналогично, умножение .1 * 26 дает результат, отличный от результата
добавив .1 к себе 26 раз. Ошибки округления становятся еще серьезнее
при приведении с плавающей запятой к целому, потому что приведение к
целочисленный тип отбрасывает нецелую часть даже для вычислений
что «похожи» они должны иметь интегральные значения. Например,
следующие высказывания:
double d = 29.0 * 0.01;
System.out.println(d);
System.out.println((int) (d * 100));
выдаст в качестве вывода:
0.29
28
что, вероятно, не то, что вы могли бы ожидать вначале.
См. Предоставленную ссылку для получения дополнительной информации.