Как проверить, является ли число типом double в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь определять, является ли число типом double в Java. Мы рассмотрим различные методы, начиная с проверки, является ли объект экземпляром оберточного класса Double с использованием оператора instanceof.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/BasicSyntaxGroup -.-> java/type_casting("Type Casting") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/wrapper_classes("Wrapper Classes") subgraph Lab Skills java/data_types -.-> lab-559954{{"Как проверить, является ли число типом double в Java"}} java/type_casting -.-> lab-559954{{"Как проверить, является ли число типом double в Java"}} java/classes_objects -.-> lab-559954{{"Как проверить, является ли число типом double в Java"}} java/exceptions -.-> lab-559954{{"Как проверить, является ли число типом double в Java"}} java/wrapper_classes -.-> lab-559954{{"Как проверить, является ли число типом double в Java"}} end

Проверка экземпляра класса Double

На этом этапе мы рассмотрим класс Double в Java и научимся проверять, является ли объект экземпляром этого класса. В Java примитивные типы данных, такие как double, имеют соответствующие оберточные классы, например, Double. Класс Double предоставляет полезные методы для работы с числами с двойной точностью.

Сначала создадим новый Java-файл с именем DoubleCheck.java в каталоге ~/project. Это можно сделать с помощью проводника файлов WebIDE слева. Щелкните правой кнопкой мыши в каталоге ~/project, выберите "Новый файл" и введите DoubleCheck.java.

Теперь откройте файл DoubleCheck.java в редакторе и добавьте следующий код:

public class DoubleCheck {
    public static void main(String[] args) {
        // Declare a primitive double variable
        double primitiveDouble = 123.45;

        // Declare a Double object
        Double doubleObject = 67.89;

        // Declare an Integer object
        Integer integerObject = 100;

        // Check if primitiveDouble is an instance of Double (This will not work directly)
        // System.out.println("Is primitiveDouble an instance of Double? " + (primitiveDouble instanceof Double)); // This line would cause a compile error

        // Check if doubleObject is an instance of Double
        System.out.println("Is doubleObject an instance of Double? " + (doubleObject instanceof Double));

        // Check if integerObject is an instance of Double
        System.out.println("Is integerObject an instance of Double? " + (integerObject instanceof Double));
    }
}

В этом коде:

  • Мы объявляем примитивную переменную типа double с именем primitiveDouble.
  • Мы объявляем объект типа Double с именем doubleObject.
  • Мы объявляем объект типа Integer с именем integerObject для сравнения.
  • Мы используем оператор instanceof для проверки, являются ли doubleObject и integerObject экземплярами класса Double.
  • Обратите внимание, что оператор instanceof нельзя использовать напрямую с примитивными типами, такими как double.

Сохраните файл DoubleCheck.java.

Теперь скомпилируем и запустим программу. Откройте терминал внизу WebIDE. Убедитесь, что вы находитесь в каталоге ~/project.

Скомпилируйте код с помощью javac:

javac DoubleCheck.java

Если нет ошибок компиляции, запустите скомпилированный код с помощью java:

java DoubleCheck

Вы должны увидеть вывод, похожий на следующий:

Is doubleObject an instance of Double? true
Is integerObject an instance of Double? false

Этот вывод подтверждает, что doubleObject является экземпляром класса Double, в то время как integerObject - нет. Это демонстрирует, как использовать оператор instanceof для проверки типа объекта в Java.

Преобразование строки в число типа double

На этом этапе мы научимся преобразовывать строку (String), представляющую число, в значение типа double в Java. Это распространенная задача, когда числовой ввод поступает в виде текста, например, от пользователя или при чтении из файла. Класс Double предоставляет статический метод parseDouble(), специально предназначенный для этой цели.

Создадим новый Java-файл с именем StringtoDouble.java в каталоге ~/project. Используйте проводник файлов WebIDE для создания этого файла.

Откройте файл StringtoDouble.java и добавьте следующий код:

public class StringtoDouble {
    public static void main(String[] args) {
        // A string representing a double value
        String doubleString = "987.65";

        // Another string representing a double value
        String anotherDoubleString = "3.14159";

        // A string that is not a valid double
        String invalidDoubleString = "hello";

        // Parse the strings to double values
        try {
            double parsedDouble1 = Double.parseDouble(doubleString);
            double parsedDouble2 = Double.parseDouble(anotherDoubleString);

            System.out.println("Parsed double from \"" + doubleString + "\": " + parsedDouble1);
            System.out.println("Parsed double from \"" + anotherDoubleString + "\": " + parsedDouble2);

            // Attempt to parse an invalid string (This will cause an error)
            // double parsedDouble3 = Double.parseDouble(invalidDoubleString);
            // System.out.println("Parsed double from \"" + invalidDoubleString + "\": " + parsedDouble3);

        } catch (NumberFormatException e) {
            System.out.println("Error parsing string: " + e.getMessage());
        }
    }
}

В этом коде:

  • У нас есть две строки, doubleString и anotherDoubleString, которые содержат корректные представления чисел типа double.
  • Также есть строка invalidDoubleString, которая не представляет собой корректное число.
  • Мы используем метод Double.parseDouble() для преобразования корректных строк в примитивные значения типа double.
  • Мы обернули код преобразования в блок try-catch. Это важно, потому что если строку нельзя преобразовать в корректное число типа double (как в случае с invalidDoubleString), метод parseDouble() выбросит исключение NumberFormatException. Блок catch обрабатывает эту ошибку корректно.

Сохраните файл StringtoDouble.java.

Теперь скомпилируем и запустим программу. Откройте терминал и убедитесь, что вы находитесь в каталоге ~/project.

Скомпилируйте код:

javac StringtoDouble.java

Запустите скомпилированный код:

java StringtoDouble

Вы должны увидеть вывод, похожий на следующий:

Parsed double from "987.65": 987.65
Parsed double from "3.14159": 3.14159

Если вы раскомментируете строки, которые пытаются преобразовать invalidDoubleString, и запустите код снова, вы увидите сообщение об ошибке из блока catch, что демонстрирует, как программа обрабатывает некорректный ввод.

На этом этапе показано, как преобразовать строковые представления чисел в фактические значения типа double, что является важным навыком для обработки ввода в ваших Java-программах.

Различие между числами типа double и int

На этом этапе мы рассмотрим, как различать значения типа double и int (целые числа) в Java, особенно когда дело касается чисел, которые могут казаться похожими. Тип double может представлять как числа с десятичной частью, так и целые числа, в то время как тип int может представлять только целые числа. Понимание этой разницы является важным для выбора правильного типа данных и выполнения точных вычислений.

Создадим новый Java-файл с именем NumberTypes.java в каталоге ~/project с помощью проводника файлов WebIDE.

Откройте файл NumberTypes.java и добавьте следующий код:

public class NumberTypes {
    public static void main(String[] args) {
        // An integer variable
        int integerValue = 10;

        // A double variable representing a whole number
        double doubleValueWhole = 20.0;

        // A double variable representing a number with a decimal part
        double doubleValueDecimal = 30.5;

        // Print the values and their types (implicitly)
        System.out.println("Integer value: " + integerValue);
        System.out.println("Double value (whole): " + doubleValueWhole);
        System.out.println("Double value (decimal): " + doubleValueDecimal);

        // Check the type using instanceof (for wrapper classes)
        Integer integerObject = 100;
        Double doubleObject = 200.0;

        System.out.println("Is integerObject an instance of Integer? " + (integerObject instanceof Integer));
        System.out.println("Is doubleObject an instance of Double? " + (doubleObject instanceof Double));
        System.out.println("Is integerObject an instance of Double? " + (integerObject instanceof Double));
        System.out.println("Is doubleObject an instance of Integer? " + (doubleObject instanceof Integer));

        // Demonstrate potential issues with comparing double and int
        System.out.println("Is integerValue equal to doubleValueWhole? " + (integerValue == doubleValueWhole)); // This comparison works due to type promotion
        // System.out.println("Is integerValue equal to doubleValueDecimal? " + (integerValue == doubleValueDecimal)); // This would be false
    }
}

В этом коде:

  • Мы объявляем переменную типа int с именем integerValue.
  • Мы объявляем две переменные типа double, одну представляющую целое число (doubleValueWhole), а другую - число с десятичной частью (doubleValueDecimal).
  • Мы выводим эти значения, чтобы увидеть их представление.
  • Мы используем оператор instanceof с обертками Integer и Double для явной проверки типов объектов, аналогично тому, как мы делали на первом этапе.
  • Мы также показываем сравнение между значением типа int и double. Java выполняет автоматическое преобразование типов (type promotion), преобразуя int в double перед сравнением, поэтому выражение integerValue == doubleValueWhole возвращает true.

Сохраните файл NumberTypes.java.

Теперь скомпилируем и запустим программу. Откройте терминал и убедитесь, что вы находитесь в каталоге ~/project.

Скомпилируйте код:

javac NumberTypes.java

Запустите скомпилированный код:

java NumberTypes

Вы должны увидеть вывод, похожий на следующий:

Integer value: 10
Double value (whole): 20.0
Double value (decimal): 30.5
Is integerObject an instance of Integer? true
Is doubleObject an instance of Double? true
Is integerObject an instance of Double? false
Is doubleObject an instance of Integer? false
Is integerValue equal to doubleValueWhole? true

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

Резюме

В этом практическом занятии (лабораторной работе) мы научились проверять, является ли число типом Double в Java. Мы начали с изучения оберточного класса Double и использования оператора instanceof для определения, является ли объект экземпляром класса Double. Мы заметили, что оператор instanceof работает с объектами класса Double, но не напрямую с примитивными типами double.