Страницы

Поиск по вопросам

вторник, 23 апреля 2019 г.

Почему неправильно суммируется Double

У меня есть такая программа:
public class Main { public static void main(String[] args) { double nominal = 1.0; double sum = 0;
for (int i = 0; i < 10; i++) { sum += 0.1; System.out.println("sum = " + sum); }
if (nominal == sum) { System.out.println("Числа равны!"); } else { System.out.println("Числа не равны!"); } } }
По смыслу, результат сложения числа в цикле должен равняться 1, но результат выходит такой..:
sum = 0.1 sum = 0.2 sum = 0.30000000000000004 sum = 0.4 sum = 0.5 sum = 0.6 sum = 0.7 sum = 0.7999999999999999 sum = 0.8999999999999999 sum = 0.9999999999999999 Числа не равны!
Почему double суммируется не так, как нужно?


Ответ

Не все числа можно точно представить в виде double, таков стандарт вычислений с плавающей запятой - IEEE 754
Именно поэтому, для точных вычислений дробных чисел (деньги, единицы товара), применяют числа с фиксированной запятой, но никак не double или float
Числа с плавающей запятой прекрасно подходят для обработки научных расчетов и численного моделирования.
О сравнении чисел с плавающей запятой

Комментариев нет:

Отправить комментарий