Страницы

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

четверг, 13 февраля 2020 г.

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

#java


У меня есть такая программа:

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 суммируется не так, как нужно? 
    


Ответы

Ответ 1



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

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

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