Зачем это читать ❔

В Java тип данных double играет очень важную роль в правильности и точности кода. Это то, что я чувствую и переживаю из своих практик до сих пор.

Это связано с тем, что мы чаще склонны совершать ошибки при приведении и преобразовании типов при работе с двойным типом данных. Кроме того, отладка кода, включающего элементы данных двойного типа, становится более сложной задачей, когда у нас нет доступа к тестовым примерам.

Даже небольшие ошибки в правильном приведении типов и преобразовании значений данных типа double при выполнении над ними операций приводят к некорректным выводам, несмотря на абсолютно правильную логику кода.

Поехали 🟢

Что такое двойной тип данных в Java?

Тип данных double представляет собой 64-битную IEEE 754 двойную точность с плавающей запятой. Диапазон его значений неограничен. Тип данных double обычно используется для десятичных значений, как и float. Тип данных double также никогда не следует использовать для точных значений, таких как валюта. Его значение по умолчанию равно 0.0d.

Пример: double d1 = 12,3;

Не забивая это пространство дополнительными теориями, мы рассмотрим пару реализаций и сценариев, связанных с двойным типом данных, с которым мы все обычно сталкиваемся при написании логики в наших кодах.

Сценарий 1.Деление двух значений целочисленного типа и сохранение результата в переменной типа double

class PlayWithDouble {
    public static void main(String[] args) {
        int sum = 9;
        int length = 4;

        double avg1 = sum/length;
        System.out.println(avg1); // 2.0 --> Incorrect output

        double avg2 = ((double)sum)/length;
        System.out.println(avg2); // 2.25 --> Correct output
    }
}

Здесь при вычислении avg1 простое деление суммы на длину не сработало. Но при вычислении avg2 он дал правильный результат, потому что сумма была приведена к удвоению. Помните, что (double)(sum/length) также даст 2,0, что является неправильным ответом.

Сценарий 2.Выполнение операций над типом данных double и сохранение результата в переменной типа double

class PlayWithDouble {
    public static void main(String[] args) {
        double d = 12.374;

        double a1 = d*(3/100);
        System.out.println(a1); // 0.0  --> Incorrect Output

        double a2 = (d*3)/100;
        System.out.println(a2); // 0.37122  --> Correct Output
    }
}

Здесь решающее значение имеет правильное размещение скобок.

Сценарий 3.Умножение двух значений типа double

class PlayWithDouble {
    public static void main(String[] args) {
        System.out.println(13.5*6.28); // 84.78  --> Correct Output
    }
}

Сценарий 4.Умножение целочисленного значения на значение типа double и сохранение результата в переменной типа double.

class PlayWithDouble {
    public static void main(String[] args) {
        double d = 12.374;
        int a = 4;
        
        double ans = a*d;
        System.out.println(ans); // 49.496 --> Correct Output
    }
}

Если мы умножаем целочисленное значение на двойное значение и сохраняем результат в переменной типа double, то приведение типов не требуется.

Сценарий 5. Умножение целочисленного значения на двойное значение и сохранение результата в переменной типа int.

class PlayWithDouble {
    public static void main(String[] args) {
        double d = 12.374;
        int a = 4;

        int c = (int)(a*d);
        System.out.println(c); // 49 --> The integer form of 49.496
    }
}

Здесь сначала произошло умножение (a*d), затем результат был приведен к целочисленному типу.

Сценарий 6. Немного измененная версия Сценария 5.

class PlayWithDouble {
    public static void main(String[] args) {
        double d = 12.374;
        int a = 4;

        int c = a*(int)d;
        System.out.println(c); // 48 --> The integer form of 48
    }
}

Здесь сначала d было приведено к целочисленной форме, а затем умножено на a. Итак, результат здесь оказался 48.

Вот некоторые очень распространенные сценарии приложений с двойным типом данных, с которыми каждый кодер или разработчик очень часто сталкивается при написании кода.

Я уверен, что есть и другие разные сценарии, с которыми вы можете столкнуться при написании кода, но вот некоторые из них, которые я мог бы упомянуть из своего опыта. Я буду более чем счастлив, если вы решите упомянуть еще несколько полезных указателей из ваших знаний в разделе комментариев.

Чтобы узнать больше о примитивных типах данных в Java, вы можете обратиться к:

Документация по Oracle Java

Java-документация по Java

Большое спасибо за то, что дочитали это до сих пор, потратив свое драгоценное время. Я действительно благодарен каждому из вас 🙏🧡. Пожалуйста, рассмотрите возможность оставить свои отзывы и предложения в разделе комментариев, чтобы я мог улучшить многие аспекты. Буду признателен, если вы разместите свой запрос в разделе комментариев и дадите мне возможность обратиться и помочь вам с ним.

Желаю, чтобы вы стали лучшей версией себя без всякой причины. 🌈✌😃