소개
이 랩에서는 Java 에서 숫자가 float 인지 확인하는 방법을 배우게 됩니다. Float 클래스의 인스턴스인지 확인하는 것부터 시작하여 다양한 기술을 탐구할 것입니다.
그런 다음 문자열을 float 로 파싱하는 방법과 마지막으로 float 값을 double 값과 비교하는 방법을 배우고, 이러한 작업에 관련된 미묘한 차이점과 잠재적인 함정을 이해하게 됩니다.
Float 클래스 인스턴스 확인
이 단계에서는 Java 의 Float 클래스와 이 클래스의 인스턴스를 생성하고 확인하는 방법을 살펴보겠습니다. Java 에서 float와 같은 기본 데이터 타입에는 Float와 같은 해당 래퍼 클래스가 있습니다. 이러한 래퍼 클래스는 기본 타입으로 작업하는 데 유용한 메서드를 제공합니다.
먼저,
~/project디렉토리에FloatExample.java라는 새 Java 파일을 생성해 보겠습니다. 왼쪽의 파일 탐색기에서 마우스 오른쪽 버튼을 클릭하고 "새 파일"을 선택한 다음FloatExample.java를 입력하여 이 작업을 수행할 수 있습니다.편집기에서
FloatExample.java파일을 열고 다음 코드를 추가합니다.public class FloatExample { public static void main(String[] args) { // Create a primitive float variable float primitiveFloat = 123.45f; // Create a Float object using the constructor Float objectFloat = new Float(primitiveFloat); // Verify if objectFloat is an instance of the Float class boolean isFloatInstance = objectFloat instanceof Float; // Print the result System.out.println("Is objectFloat an instance of Float? " + isFloatInstance); } }이 코드의 새로운 부분을 자세히 살펴보겠습니다.
float primitiveFloat = 123.45f;: 이 줄은 기본float변수를 선언하고 값을 할당합니다. 끝에 있는f는 이것이 float 리터럴임을 나타내는 데 중요합니다.Float objectFloat = new Float(primitiveFloat);: 이 줄은Float클래스 생성자와 기본float값을 사용하여Float객체를 생성합니다.boolean isFloatInstance = objectFloat instanceof Float;:instanceof연산자는 객체가 특정 클래스의 인스턴스인지 확인하는 데 사용됩니다. 여기서는objectFloat가Float클래스의 인스턴스인지 확인합니다. 결과는 부울 변수isFloatInstance에 저장됩니다.System.out.println("Is objectFloat an instance of Float? " + isFloatInstance);: 이 줄은 확인 결과를 콘솔에 출력합니다.
FloatExample.java파일을 저장합니다 (Ctrl+S 또는 Cmd+S).이제 프로그램을 컴파일해 보겠습니다. WebIDE 하단의 터미널을 열고
~/project디렉토리에 있는지 확인합니다. 그런 다음 다음 명령을 실행합니다.javac FloatExample.java컴파일이 성공하면 출력이 표시되지 않으며
~/project디렉토리에FloatExample.class파일이 생성됩니다.마지막으로
java명령을 사용하여 컴파일된 프로그램을 실행합니다.java FloatExample다음 출력이 표시됩니다.
Is objectFloat an instance of Float? true이 출력은 우리가 생성한
objectFloat가 실제로Float클래스의 인스턴스임을 확인합니다. Java 에서 기본 타입과 해당 래퍼 클래스의 차이점을 이해하는 것은 중요합니다.
문자열을 Float 로 파싱
이 단계에서는 숫자의 String 표현을 Java 의 float 값으로 변환하는 방법을 배우게 됩니다. 이는 사용자 입력이나 파일에서 읽는 등 텍스트로 숫자 입력을 받을 때 흔히 발생하는 작업입니다. Float 래퍼 클래스는 이 변환을 위한 편리한 메서드를 제공합니다.
편집기에서
FloatExample.java파일을 다시 엽니다.기존 코드를 다음 새 코드로 바꿉니다.
public class FloatExample { public static void main(String[] args) { // Define a string containing a float value String floatString = "987.65"; // Parse the string to a float primitive float parsedFloatPrimitive = Float.parseFloat(floatString); // Parse the string to a Float object Float parsedFloatObject = Float.valueOf(floatString); // Print the results System.out.println("Parsed primitive float: " + parsedFloatPrimitive); System.out.println("Parsed Float object: " + parsedFloatObject); } }새로운 부분을 살펴보겠습니다.
String floatString = "987.65";: 부동 소수점 숫자의 텍스트 표현을 담는String변수를 정의합니다.float parsedFloatPrimitive = Float.parseFloat(floatString);:Float.parseFloat()메서드는String을 입력으로 받아 기본float값을 반환하는Float클래스의 정적 메서드입니다.Float parsedFloatObject = Float.valueOf(floatString);:Float.valueOf()메서드는String을 받아Float객체를 반환하는 또 다른 정적 메서드입니다. 두 메서드 모두 변환을 수행하지만 하나는 기본 값을 반환하고 다른 하나는 객체를 반환합니다.
FloatExample.java파일을 저장합니다 (Ctrl+S 또는 Cmd+S).터미널에서 수정된 프로그램을 컴파일합니다.
javac FloatExample.java다시, 성공하면 출력이 없습니다.
컴파일된 프로그램을 실행합니다.
java FloatExample다음 출력이 표시됩니다.
Parsed primitive float: 987.65 Parsed Float object: 987.65이는
Float클래스 메서드를 사용하여 유효한 부동 소수점 숫자를 포함하는 문자열을 기본float와Float객체로 모두 성공적으로 변환할 수 있음을 보여줍니다.참고: 문자열에 유효한 부동 소수점 숫자가 포함되어 있지 않으면 이러한 메서드는
NumberFormatException을 발생시킵니다. 실제 응용 프로그램에서는 이러한 예외를 처리하는 것이 중요하지만, 이 기본 예제에서는 입력 문자열이 유효하다고 가정합니다.
Float 와 Double 비교
이 단계에서는 Java 에서 float와 double 값을 비교하는 방법을 살펴보겠습니다. float와 double 모두 부동 소수점 숫자를 나타내는 데 사용되지만, double은 float보다 더 높은 정밀도를 제공합니다. 부동 소수점 숫자를 비교하는 것은 잠재적인 정밀도 차이로 인해 때때로 까다로울 수 있습니다.
편집기에서
FloatExample.java파일을 마지막으로 엽니다.float와double비교를 보여주는 다음 코드로 기존 코드를 바꿉니다.public class FloatExample { public static void main(String[] args) { // Define a float value float floatValue = 0.1f; // Define a double value double doubleValue = 0.1; // Compare using the equality operator (==) boolean areEqualUsingEquals = (floatValue == doubleValue); // Compare using the compareTo method (for Float objects) // First, convert primitive float to Float object Float floatObject = floatValue; // Convert primitive double to Double object (for comparison with Float object) Double doubleObject = doubleValue; // Note: Direct compareTo between Float and Double objects is not standard. // We usually compare their primitive values or convert one to the other type. // Let's compare the primitive values after casting the double to float. boolean areEqualUsingCast = (floatValue == (float) doubleValue); // Print the results System.out.println("Float value: " + floatValue); System.out.println("Double value: " + doubleValue); System.out.println("Are they equal using ==? " + areEqualUsingEquals); System.out.println("Are they equal after casting double to float? " + areEqualUsingCast); // A safer way to compare floating-point numbers is to check if the absolute difference is within a small tolerance. double tolerance = 0.000001; // Define a small tolerance boolean areEqualWithTolerance = Math.abs(floatValue - doubleValue) < tolerance; System.out.println("Are they equal within tolerance? " + areEqualWithTolerance); } }새로운 코드를 살펴보겠습니다.
float floatValue = 0.1f;: 값 0.1 을 가진float변수를 정의합니다.double doubleValue = 0.1;: 값 0.1 을 가진double변수를 정의합니다.boolean areEqualUsingEquals = (floatValue == doubleValue);: 동등 연산자==를 사용하여float와double값을 직접 비교합니다.boolean areEqualUsingCast = (floatValue == (float) doubleValue);: 비교하기 전에doubleValue를float로 캐스팅합니다. 이는 정밀도 손실로 인해 때때로 예상치 못한 결과를 초래할 수 있습니다.double tolerance = 0.000001;: 허용 오차라고 하는 작은 값을 정의합니다.boolean areEqualWithTolerance = Math.abs(floatValue - doubleValue) < tolerance;: 부동 소수점 숫자를 비교하는 더 강력한 방법은 두 값의 절대 차이가 매우 작은 숫자 (허용 오차) 보다 작은지 확인하는 것입니다.Math.abs()는 절대값을 계산합니다.
FloatExample.java파일을 저장합니다 (Ctrl+S 또는 Cmd+S).터미널에서 프로그램을 컴파일합니다.
javac FloatExample.java컴파일된 프로그램을 실행합니다.
java FloatExample다음과 유사한 출력이 표시됩니다.
Float value: 0.1 Double value: 0.1 Are they equal using ==? false Are they equal after casting double to float? true Are they equal within tolerance? true==를 사용하여floatValue와doubleValue를 직접 비교하면false가 반환되는 것을 확인하십시오. 이는0.1을 이진 부동 소수점으로 정확하게 표현할 수 없고,0.1의float와double표현이 약간 다르기 때문입니다. 비교하기 전에double을float로 캐스팅하면 경우에 따라 동일하게 보일 수 있지만, 실제 동등성을 위해 부동 소수점 숫자를 비교하는 가장 신뢰할 수 있는 방법은 차이가 작은 허용 오차 내에 있는지 확인하는 것입니다.
요약
이 랩에서는 Java 에서 숫자가 float 인지 확인하는 방법을 배웠습니다. Float 래퍼 클래스를 살펴보고 instanceof 연산자를 사용하여 이 클래스의 인스턴스를 생성하고 확인하는 것으로 시작했습니다. 여기에는 기본 float를 생성한 다음 Float 객체로 래핑하여 래퍼 클래스의 개념과 기본 유형과의 관계를 시연하는 작업이 포함되었습니다.
그런 다음 Float.parseFloat() 메서드를 사용하여 숫자의 문자열 표현을 Float로 파싱하는 것으로 넘어갔습니다. 이 단계에서는 문자열 입력을 처리하고 이를 숫자 유형으로 변환하는 방법을 강조했습니다. 이는 프로그래밍에서 흔히 사용되는 작업입니다. 마지막으로, Float 값을 Double 값과 비교하는 뉘앙스를 살펴보고, 정밀도 차이의 가능성과 적절한 비교 메서드를 사용하거나 동등성 검사에 대한 허용 오차를 고려하는 것의 중요성을 이해했습니다.



