Java 에서 숫자가 정수인지 확인하는 방법

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 숫자가 정수인지 확인하는 방법을 배우게 됩니다. Math.floor() 메서드를 사용하여 정수 값을 확인하는 것부터 시작하여 다양한 기술을 탐구할 것입니다. doublefloat 데이터 유형을 모두 사용하여 이 메서드가 서로 다른 부동 소수점 표현에서 어떻게 작동하는지 실습할 것입니다. 마지막으로, 문자열 입력을 처리하고 정수 확인을 수행하기 전에 숫자 유형으로 변환하는 방법을 다룰 것입니다. 이 랩은 Java 프로그램에서 숫자 데이터를 검증하기 위한 실용적인 기술을 제공할 것입니다.

Math.floor() 를 사용하여 정수 확인

이 단계에서는 Math.floor() 메서드를 사용하여 Java 에서 숫자가 정수인지 확인하는 방법을 살펴보겠습니다. 이는 프로그래밍, 특히 사용자 입력 또는 계산을 처리할 때 흔히 사용되는 작업입니다.

먼저, Math.floor()가 무엇을 하는지 이해해 봅시다. Java 의 Math.floor() 메서드는 인자보다 작거나 같은 가장 큰 정수를 반환합니다. 예를 들어, Math.floor(5.9)5.0을 반환하고, Math.floor(5.0)5.0을 반환합니다.

이 속성을 사용하여 숫자가 정수인지 확인할 수 있습니다. 숫자가 정수이면 Math.floor()를 적용하면 동일한 숫자가 반환됩니다. 숫자에 소수 부분이 있으면 Math.floor()는 더 작은 정수를 반환합니다.

이를 실습하기 위해 새로운 Java 파일을 만들어 보겠습니다. WebIDE 를 열고 ~/project 디렉토리에 IntegerCheck.java라는 새 파일을 만듭니다.

이제 다음 코드를 복사하여 IntegerCheck.java 파일에 붙여넣습니다.

public class IntegerCheck {

    public static void main(String[] args) {
        double number1 = 10.0;
        double number2 = 10.5;

        // Check if number1 is an integer
        if (number1 == Math.floor(number1)) {
            System.out.println(number1 + " is an integer.");
        } else {
            System.out.println(number1 + " is not an integer.");
        }

        // Check if number2 is an integer
        if (number2 == Math.floor(number2)) {
            System.out.println(number2 + " is an integer.");
        } else {
            System.out.println(number2 + " is not an integer.");
        }
    }
}

코드를 분석해 보겠습니다.

  • double number1 = 10.0;double number2 = 10.5;: 두 개의 double 변수를 선언합니다. 하나는 정수 값을 나타내고 다른 하나는 정수가 아닌 값을 나타냅니다.
  • if (number1 == Math.floor(number1)): 이것이 핵심 로직입니다. 원래 숫자 (number1) 를 Math.floor(number1)의 결과와 비교합니다. 두 값이 같으면 숫자는 정수입니다.
  • System.out.println(...): 이 줄은 결과를 콘솔에 출력합니다.

IntegerCheck.java 파일을 저장합니다.

이제 프로그램을 컴파일하고 실행해 보겠습니다. WebIDE 에서 터미널을 열고 ~/project 디렉토리에 있는지 확인합니다.

javac를 사용하여 코드를 컴파일합니다.

javac IntegerCheck.java

컴파일이 성공하면 ~/project 디렉토리에 IntegerCheck.class라는 새 파일이 표시됩니다.

이제 java를 사용하여 컴파일된 코드를 실행합니다.

java IntegerCheck

다음 출력을 볼 수 있습니다.

10.0 is an integer.
10.5 is not an integer.

이 출력은 Math.floor()를 사용한 로직이 double 값이 정수를 나타내는지 여부를 올바르게 식별함을 확인합니다.

Double 및 Float 타입으로 테스트

이전 단계에서는 double 값과 함께 Math.floor()를 사용했습니다. Java 에는 doublefloat를 포함하여 숫자를 나타내는 다양한 데이터 유형이 있습니다. 둘 다 부동 소수점 숫자 (소수점이 있는 숫자) 에 사용되지만 doublefloat보다 더 많은 정밀도를 제공합니다.

IntegerCheck.java 프로그램을 수정하여 doublefloat 유형 모두로 테스트하여 Math.floor()가 각 유형에서 어떻게 작동하는지 확인해 보겠습니다.

WebIDE 편집기에서 IntegerCheck.java 파일을 엽니다.

기존 코드를 다음으로 바꿉니다.

public class IntegerCheck {

    public static void main(String[] args) {
        double doubleNumber1 = 20.0;
        double doubleNumber2 = 20.75;

        float floatNumber1 = 30.0f; // Note the 'f' suffix for float literals
        float floatNumber2 = 30.25f;

        // Check if doubleNumber1 is an integer
        if (doubleNumber1 == Math.floor(doubleNumber1)) {
            System.out.println(doubleNumber1 + " (double) is an integer.");
        } else {
            System.out.println(doubleNumber1 + " (double) is not an integer.");
        }

        // Check if doubleNumber2 is an integer
        if (doubleNumber2 == Math.floor(doubleNumber2)) {
            System.out.println(doubleNumber2 + " (double) is an integer.");
        } else {
            System.out.println(doubleNumber2 + " (double) is not an integer.");
        }

        // Check if floatNumber1 is an integer
        // Math.floor() takes a double, so the float is promoted to double
        if (floatNumber1 == Math.floor(floatNumber1)) {
            System.out.println(floatNumber1 + " (float) is an integer.");
        } else {
            System.out.println(floatNumber1 + " (float) is not an integer.");
        }

        // Check if floatNumber2 is an integer
        if (floatNumber2 == Math.floor(floatNumber2)) {
            System.out.println(floatNumber2 + " (float) is an integer.");
        } else {
            System.out.println(floatNumber2 + " (float) is not an integer.");
        }
    }
}

float 리터럴 값 (30.0f, 30.25f) 뒤에 있는 f 접미사를 확인하십시오. 이는 Java 에서 숫자가 double(부동 소수점 리터럴의 기본값) 이 아닌 float임을 나타내기 위해 필요합니다.

또한 Math.floor()double 인수를 사용하도록 정의되어 있음을 확인하십시오. floatMath.floor()에 전달하면 Java 는 메서드가 실행되기 전에 자동으로 floatdouble로 승격시킵니다. floatNumber1 == Math.floor(floatNumber1) 비교는 Math.floor()의 결과 (double) 가 floatNumber1과 비교되기 때문에 여전히 작동합니다 (비교를 위해 double로 승격됨).

IntegerCheck.java 파일을 저장합니다.

이제 ~/project 디렉토리의 터미널에서 수정된 프로그램을 컴파일하고 실행합니다.

javac IntegerCheck.java
java IntegerCheck

다음과 유사한 출력을 볼 수 있습니다.

20.0 (double) is an integer.
20.75 (double) is not an integer.
30.0 (float) is an integer.
30.25 (float) is not an integer.

이는 Math.floor() 비교 메서드가 doublefloat 유형 모두에 대해 올바르게 작동함을 보여줍니다.

String 입력 변환 처리

실제 응용 프로그램에서는 종종 사용자로부터 입력을 받아야 하며, 이 입력은 일반적으로 String으로 읽힙니다. 입력이 정수를 나타내는지 확인하는 것과 같은 숫자 검사를 수행하려면 먼저 Stringdouble과 같은 숫자 유형으로 변환해야 합니다.

이 단계에서는 프로그램을 수정하여 사용자 입력을 String으로 받고, 이를 double로 변환한 다음 Math.floor()를 사용하여 원래 입력이 정수를 나타내는지 확인합니다.

WebIDE 편집기에서 IntegerCheck.java 파일을 엽니다.

기존 코드를 다음으로 바꿉니다.

import java.util.Scanner; // Import the Scanner class

public class IntegerCheck {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Create a Scanner object

        System.out.print("Enter a number: "); // Prompt the user for input
        String input = scanner.nextLine(); // Read user input as a String

        try {
            // Convert the String input to a double
            double number = Double.parseDouble(input);

            // Check if the number is an integer using Math.floor()
            if (number == Math.floor(number)) {
                System.out.println("The input '" + input + "' represents an integer.");
            } else {
                System.out.println("The input '" + input + "' does not represent an integer.");
            }

        } catch (NumberFormatException e) {
            // Handle cases where the input is not a valid number
            System.out.println("Invalid input: '" + input + "' is not a valid number.");
        } finally {
            scanner.close(); // Close the scanner
        }
    }
}

코드의 새로운 부분을 살펴보겠습니다.

  • import java.util.Scanner;: 이 줄은 콘솔에서 입력을 읽는 데 사용되는 Scanner 클래스를 가져옵니다.
  • Scanner scanner = new Scanner(System.in);: 이는 일반적으로 키보드인 표준 입력 스트림 (System.in) 에서 입력을 읽는 Scanner 객체를 생성합니다.
  • System.out.print("Enter a number: ");: 이 줄은 사용자에게 숫자를 입력하라는 메시지를 표시합니다.
  • String input = scanner.nextLine();: 이는 사용자가 입력한 전체 입력 줄을 String으로 읽어 input 변수에 저장합니다.
  • try { ... } catch (NumberFormatException e) { ... }: 이는 try-catch 블록입니다. 잠재적인 오류를 처리하는 데 사용됩니다. 이 경우 String 입력을 double로 변환하려고 합니다. 입력이 유효한 숫자가 아니면 (예: "hello") NumberFormatException이 발생하고 catch 블록 내부의 코드가 실행됩니다.
  • double number = Double.parseDouble(input);: 이는 변환에 중요한 부분입니다. Double.parseDouble()Stringdouble 값으로 변환하려고 시도하는 Double 클래스의 정적 메서드입니다.
  • finally { scanner.close(); }: finally 블록은 예외가 발생했는지 여부에 관계없이 scanner.close() 메서드가 호출되어 Scanner에서 사용하는 시스템 리소스를 해제하도록 합니다.

IntegerCheck.java 파일을 저장합니다.

이제 ~/project 디렉토리의 터미널에서 프로그램을 컴파일하고 실행합니다.

javac IntegerCheck.java
java IntegerCheck

이제 프로그램은 입력을 입력할 때까지 대기합니다.

42와 같은 정수를 입력하고 Enter 키를 누릅니다. 출력은 다음과 같아야 합니다.

Enter a number: 42
The input '42' represents an integer.

프로그램을 다시 실행하고 3.14와 같은 정수가 아닌 숫자를 입력하고 Enter 키를 누릅니다. 출력은 다음과 같아야 합니다.

Enter a number: 3.14
The input '3.14' does not represent an integer.

프로그램을 다시 한 번 실행하고 test와 같이 숫자가 아닌 것을 입력하고 Enter 키를 누릅니다. 출력은 다음과 같아야 합니다.

Enter a number: test
Invalid input: 'test' is not a valid number.

이는 사용자 입력을 String으로 처리하고, 이를 숫자 유형으로 변환한 다음 Math.floor() 검사를 적용하는 동시에 잘못된 입력으로 인한 잠재적인 오류를 처리하는 방법을 보여줍니다.

요약

이 Lab 에서는 Math.floor() 메서드를 사용하여 Java 에서 숫자가 정수인지 확인하는 방법을 배웠습니다. 정수의 경우 Math.floor()가 동일한 값을 반환하고, 정수가 아닌 경우 더 작은 정수를 반환한다는 개념을 탐구했습니다. 우리는 이 로직을 Java 프로그램에서 구현하여 원래 숫자와 Math.floor()의 결과를 비교하여 정수인지 확인했습니다.