Вы должны округлить результат, числа с плавающей точкой в Java (и в основном в любой другой среде) не идеально, и иногда появляются небольшие неточности.
Если вы имеете дело с десятичными числами, есть BigDecimal
, которые могут точно представлять то, что вы показали (просто не могут точно представлять другие такие вещи, как 1 / 3
).
Кроме того, вы можете умножить на 10, использовать Math.round
и поделить на 10
, если проблема связана не с фактическим конечным значением, а с неточностями, которые возникли за время, которое вы создали значение. случается в случае с 2.6, построенным так:
double n = 0;
n += 1;
n += 0.2;
n += 1;
n += 0.2;
n += 0.2;
System.out.println("n = " + n); // "2.6000000000000005"
n = (double)Math.round(n * 10) / 10;
System.out.println("n = " + n); // "2.6"
... но я не думаю, что есть гарантия, что это обязательно произойдет со всеми значениями. (Я не гуру с плавающей запятой.)
Или , просто беспокойтесь об этом, когда вы выполняете вывод, обрезая результат вывода до соответствующего уровня точности.