C#의 Math.Floor() 메서드는 지정된 숫자보다 작거나 같은 정수 중 가장 큰 값을 반환하는 메서드입니다. 쉽게 말해 소수점 이하를 '내림'하여 정수 값을 얻을 때 사용합니다. 특히 음수의 경우 단순히 소수점을 잘라내는 것이 아니라, 항상 더 작은 정수 방향(음의 무한대 방향)으로 내려간다는 점이 중요한 특징입니다.
구문(Syntax)
public static decimal Floor (decimal val); public static double Floor (double val);
첫 번째 구문에서 매개변수 val은 decimal 형식의 숫자이며, 두 번째 구문에서 val은 double 형식의 숫자입니다. 두 오버로드 모두 입력값을 내림한 결과를 동일한 자료형으로 반환합니다.
예제 1 – decimal 값에 적용하기
using System;
public class Demo {
public static void Main(){
decimal val1 = 7.10M;
decimal val2 = -79.89M;
Console.WriteLine("Result = " + Math.Floor(val1));
Console.WriteLine("Result = " + Math.Floor(val2));
}
}출력 결과
Result = 7 Result = -80
실행 결과를 보면 양수인 7.10M은 7로 내림되었고, 음수인 -79.89M은 -79가 아닌 -80으로 내림된 것을 확인할 수 있습니다. 이처럼 Math.Floor()는 음수일 때 0에서 멀어지는 방향으로 동작한다는 점에 주의해야 합니다.
예제 2 – double 값에 적용하기
using System;
public class Demo {
public static void Main(){
double val1 = 8.9;
double val2 = 88.10;
double val3 = -31.98;
Console.WriteLine("Result = " + Math.Floor(val1));
Console.WriteLine("Result = " + Math.Floor(val2));
Console.WriteLine("Result = " + Math.Floor(val3));
}
}출력 결과
Result = 8 Result = 88 Result = -32
double 형식에서도 동일하게 동작합니다. 8.9는 8로, 88.10은 88로 내림되며, 음수인 -31.98은 -31이 아닌 -32가 반환됩니다.
참고 – 유사한 수학 메서드와의 차이점
- Math.Floor(): 항상 아래 방향(음의 무한대)으로 내림합니다. (-31.98 → -32)
- Math.Ceiling(): 항상 위 방향(양의 무한대)으로 올림합니다. (-31.98 → -31)
- Math.Truncate(): 소수점 이하를 단순히 제거하며 0 방향으로 동작합니다. (-31.98 → -31)
- Math.Round(): 일반적인 반올림 규칙에 따라 가장 가까운 정수로 처리합니다.
금액 계산, 페이지 나누기, 좌표 변환 등에서 소수점 처리 로직을 설계할 때는 이 네 가지 메서드의 동작 차이를 정확히 이해하고 상황에 맞는 메서드를 선택하는 것이 좋습니다.