courses
숫자를 소수점 둘째 자리까지 반올림하는 것은 Python에서 중요한 기술입니다. 특히 금융 계산, 데이터 표시, 과학적 보고에서 유용합니다.
Python은 정밀한 반올림을 위한 다양한 방법을 제공합니다. 이 튜토리얼에서는 내장 함수, 라이브러리, 서식 기법을 사용해 Python에서 숫자를 소수점 둘째 자리까지 반올림하는 방법을 소개합니다.
데이터 분석가로 입문한다면 DataCamp의 Introduction to Python 코스를 통해 데이터 조작과 변환을 위한 Python 기초를 배우는 것을 추천합니다. 데이터 분석 워크플로에서 큰 배열의 숫자를 반올림해야 한다면 Python NumPy 튜토리얼도 도움이 됩니다.
요약
-
round(number, 2)를 사용하면 산술 반올림을 수행합니다 — 실제 값이 변경됩니다. -
표시용으로는
f"{number:.2f}"또는str.format()을 사용하세요 — 원래의 부동소수점 값은 변경되지 않습니다. -
정확한 10진수 정밀도가 필요할 때(예: 금융 계산)에는
decimal모듈을 사용하세요. -
전체 NumPy 배열을 한 번에 반올림하려면
np.round(array, 2)를 사용하세요. -
부동소수점 정밀도 함정에 유의하세요:
round(2.675, 2)는 메모리에 저장되는 방식 때문에2.68이 아니라2.67을 반환합니다.
반올림과 소수 자릿수 이해하기
소수 자릿수는 숫자에서 소수점 오른쪽에 바로 나타나는 수를 말합니다. 소수 자릿수는 숫자의 정밀도를 결정하므로 중요합니다. 자릿수가 많을수록 더 정밀하고, 적을수록 덜 정밀합니다.
숫자 반올림은 소수 자릿수를 줄여 숫자를 조정하는 것을 말합니다. 이 기법은 계산 전반의 일관성을 유지하면서 숫자를 단순화하기 위해 주로 사용됩니다. 다만 특정 소수 자릿수로 반올림하면 반올림 과정에서 작은 오차가 도입되어 계산값의 정확도에 영향을 미칩니다.
Python은 숫자를 소수점 둘째 자리까지 반올림하는 다양한 방법을 제공합니다. 아래 예제에서 이러한 기법을 자세히 설명합니다.
round()로 Python에서 숫자 반올림하기
round() 함수는 지정한 소수 자릿수로 부동소수점 숫자를 반올림하는 Python의 내장 함수입니다. 두 번째 인수에 값을 제공해 반올림할 소수 자릿수를 지정할 수 있습니다. 아래 예제는 34.15를 출력합니다.
# Example number to be rounded
number = 34.14559
# Rounding the number to 2 decimal places
rounded_number = round(number, 2)
print(rounded_number)
# 34.15
Python의 round() 함수는 두 번째 인수를 생략하면 기본 반올림 방식으로 "짝수 쪽 반올림(round half to even)"을 사용합니다. 짝수 쪽 반올림(은행가 반올림)은 수가 두 정수의 정확히 중간일 때 가장 가까운 짝수 정수로 반올림하는 방식입니다. 이 기법은 누적 반올림 오차를 줄이는 데 유용합니다.
round()에서의 부동소수점 정밀도 함정
금융 코드에서 round()에 의존하기 전에 알아둘 미묘한 점이 하나 있습니다. 다음을 시도해 보세요:
print(round(2.675, 2)) # You might expect 2.68
# Output: 2.67
결과는 2.68이 아닌 2.67입니다. 2.675 값은 이진 부동소수점(IEEE 754)으로 정확히 표현될 수 없으며, 저장된 값이 2.675보다 약간 작기 때문에 Python은 내림 반올림합니다.
금융 계산에서 정확한 반올림이 필요하다면, 명시적 반올림 모드와 함께 decimal 모듈을 사용하세요:
from decimal import Decimal, ROUND_HALF_UP
result = Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(result) # 2.68
문자열 서식 기법으로 Python에서 숫자 반올림하기
문자열 서식 기법은 특히 출력에서 숫자를 표시할 때 소수점 둘째 자리까지 반올림하는 데 유용합니다.
Python에서 문자열 서식 기법으로 숫자를 반올림하면, 표시되는 결과는 문자열이지만 원래 숫자는 변경되지 않는다는 점을 유의하세요. 원래 숫자로 계산을 수행하면 반올림되지 않은 값에 기반해 계산되므로 예상과 다른 결과가 나올 수 있습니다.
% 연산자로 반올림하기
% 연산자는 숫자를 소수점 둘째 자리까지 서식화하는 전통적인 방법을 제공합니다. % 연산자를 사용하면 플레이스홀더에 값을 삽입해 서식화된 문자열을 만들 수 있습니다.
아래 예제에서 f는 값을 부동소수점으로, .2는 반올림할 소수 자릿수를 지정합니다.
# Example number to be rounded
number = 3.14159
# Using the % operator to round to 2 decimal places
formatted_number = "%.2f" % number
print(formatted_number)
# 3.14
str.format()으로 반올림하기
str.format() 메서드는 더 복잡한 반올림 기법을 유연하게 처리할 수 있습니다. 명명된 플레이스홀더를 사용하기 때문에 개발자들이 % 연산자보다 선호하는 경향이 있습니다. 아래 예제에서는 중괄호 안에 :.2f를 사용해 숫자가 소수점 둘째 자리까지 반올림되도록 지정합니다. 코드는 3.14를 출력합니다.
# Example number to be rounded
number = 3.14159
# Using str.format() to round to 2 decimal places
formatted_number = "{:.2f}".format(number)
print(formatted_number)
# 3.14
f-string으로 반올림하기(Python 3.6+)
f-string은 Python 3.6에 도입되었으며, 이제 문자열에 값을 삽입하는 데 선호되는 방법입니다. f-string 문법은 반올림에도 특히 간결합니다. 별도의 호출 없이 한 줄로 표시 서식을 적용할 수 있습니다. 아래 코드는 14.68을 출력합니다.
# Example number to be rounded
number = 14.67856
# Using f-strings to round to 2 decimal places
formatted_number = f"{number:.2f}"
print(formatted_number)
# 14.68
format()으로 Python에서 숫자 반올림하기
내장 함수 format()은 값과 서식 지정자를 받아 서식화된 문자열을 반환합니다. str.format()과 달리 템플릿 문자열에 임베드하는 대신 숫자를 직접 전달합니다. 아래 코드는 345.69를 출력합니다.
# Example number to be rounded
number = 345.68776
# Using the built-in format() to round to 2 decimal places
formatted_number = format(number, ".2f")
print(formatted_number)
# 345.69
기타 모듈로 Python에서 숫자 반올림하기
기본 Python 외에도 숫자를 반올림할 때 사용할 수 있는 모듈이 여럿 있습니다. 대표적인 세 가지 예시인 math, decimal, NumPy를 살펴보겠습니다.
math 모듈로 반올림하기
math 모듈은 특정 소수 자릿수까지 직접 반올림하는 함수를 제공하지 않습니다. 그러나 math 모듈과 다른 산술 연산을 조합해 숫자를 소수점 둘째 자리까지 반올림할 수 있습니다.
math.floor() 함수는 숫자를 가장 가까운 아래 정수로 내림합니다. 숫자를 소수점 둘째 자리까지 내림하려면 100을 곱한 뒤 math.floor()를 적용하고 100으로 나눕니다. 아래 코드는 3.14를 출력합니다.
# Import math module
import math
# Example number to be rounded
number = 3.14159
# Using math.floor() to round down to 2 decimal places
rounded_down = math.floor(number * 100) / 100
print(rounded_down)
# 3.14
마찬가지로 math.ceil() 함수는 숫자를 가장 가까운 위 정수로 올림합니다. 숫자를 소수점 둘째 자리까지 올림하려면 100을 곱하고 math.ceil()을 적용한 다음 100으로 나눕니다. 아래 코드는 3.15를 출력합니다.
# Import the math module
import math
# Example number to be rounded
number = 3.14159
# Using math.ceil() to round up to 2 decimal places
rounded_up = math.ceil(number * 100) / 100
print(rounded_up)
# 3.15
decimal 모듈로 반올림하기
Python의 decimal 모듈은 .quantize() 메서드를 사용해 부동소수점을 원하는 소수 자릿수로 정확하게 반올림하는 데 유용합니다. 아래 예제에서는 정밀도를 0.01로 설정해 소수점 둘째 자리까지 반올림하도록 지정합니다.
# Import the decimal module
from decimal import Decimal
# Example number to be rounded
number = Decimal("18.73869")
# Define the rounding precision to 2 decimal places
precision = Decimal('0.01')
# Using the quantize method with ROUND_UP
# to round the number up to 2 decimal places
rounded_number = number.quantize(precision)
print(rounded_number)
# 18.74
항상 올림하는 특정 동작이 필요하다면, How to Round Up a Number in Python 최신 튜토리얼을 참고하세요. math와 decimal 모듈 및 기타 기법을 통해 숫자가 항상 내림이 아닌 올림되도록 하는 방법을 다룹니다. 보다 일반적으로 데이터 변환을 이해하고자 한다면 Data Analyst with Python 커리어 트랙을 통해 분석 역량을 키워 보세요.
NumPy로 반올림하기
NumPy에서 배열을 다룰 때는 np.round()를 사용해 모든 요소를 한 번에 반올림하세요. 값을 수동으로 반복 처리하는 것보다 더 빠르고 가독성이 좋습니다.
import numpy as np
prices = np.array([1.2345, 9.8765, 3.14159])
rounded_prices = np.round(prices, 2)
print(rounded_prices)
# [1.23 9.88 3.14]
np.round()는 Python 내장 round()와 동일한 은행가 반올림 규칙을 적용합니다. .round() 메서드는 pandas DataFrame과 Series에서도 동일하게 동작합니다:
import pandas as pd
df = pd.DataFrame({"price": [1.2345, 9.8765, 3.14159]})
df["price_rounded"] = df["price"].round(2)
print(df)
# price price_rounded
# 0 1.2345 1.23
# 1 9.8765 9.88
# 2 3.14159 3.14
pandas로 데이터 변환을 폭넓게 살펴보고 싶다면 pandas 튜토리얼을 참고하세요.
각 Python 반올림 방법을 사용할 때
올바른 반올림 방식을 선택하기 위한 간단한 참고 사항입니다:
| Method | Best for | Changes value? | Returns |
|---|---|---|---|
round(x, 2) |
일반 산술 | 예 | float |
f"{x:.2f}" |
표시 / 출력 | 아니오 | str |
str.format() |
표시 / 출력 | 아니오 | str |
% operator |
표시 / 출력(레거시) | 아니오 | str |
format(x, ".2f") |
표시 / 단일 값 | 아니오 | str |
math.floor() / ceil() |
항상 내림 / 항상 올림 | 예 | float |
Decimal.quantize() |
금융 / 정확한 10진수 | 예 | Decimal |
np.round(arr, 2) |
NumPy 배열 | 예 | ndarray |
선택을 돕는 몇 가지 요령:
-
숫자를 그냥 표시만 하나요? f-string(
f"{x:.2f}")을 사용하세요. 한 줄, import 필요 없음, 원래 값에 부작용 없음. -
결과로 계속 계산하나요?
round(x, 2)를 쓰세요. 계속 계산할 수 있는 float를 반환합니다. -
금융·회계 코드인가요?
Decimal.quantize()를 사용하세요.decimal모듈에서는round(2.675, 2) == 2.67같은 부동소수점 함정이 발생하지 않습니다. -
항상 올림 또는 항상 내림이 필요하나요?
math.ceil()또는math.floor()를 사용하세요. 일반 반올림 규칙을 아예 무시합니다. -
NumPy 배열이나 pandas 열을 다루나요?
np.round(arr, 2)또는series.round(2)를 사용하세요. 컬렉션 전체를 한 번에 처리합니다. -
레거시 코드를 유지보수하나요?
%연산자도 동작하지만, Python 3.6부터는 f-string이 이를 대체했습니다 — 신규 코드에서는 f-string을 권장합니다.
마무리
숫자를 소수점 둘째 자리까지 반올림하는 것은 금융 및 과학 계산에서 정밀도를 높이는 중요한 기법입니다. 이 글에서는 내장 함수, 문자열 서식 기법, math 모듈 등 소수점 둘째 자리까지 반올림하는 다양한 방법을 살펴보았습니다. 정밀도와 서식 스타일 등 구체적 요구 사항에 따라 적절한 방법을 이해하고 선택하는 것이 중요합니다. 다양한 예시로 각 방법을 연습해 보며 사용 사례에 가장 적합한 접근을 익히시길 권합니다.
Python 실력을 더 발전시키고 싶다면 함수, 데코레이터, 고급 Python 패턴을 다루는 Python Programming 스킬 트랙을 확인하세요. Python Developer 커리어 트랙도 더 고급 자료구조와 알고리즘을 학습하며 개발자로서 역량을 높이는 데 도움이 됩니다.
자주 묻는 질문
Python에서 숫자를 소수점 둘째 자리까지 반올림하는 가장 쉬운 방법은 무엇인가요?
숫자를 소수점 둘째 자리까지 반올림하는 가장 간단한 방법은 내장 함수 round()를 사용하는 것입니다.
왜 round() 함수를 사용하면 숫자가 가장 가까운 정수로 반올림되나요?
round() 함수의 기본 방식은 짝수 쪽 반올림입니다. 숫자를 소수점 둘째 자리까지 반올림하려면 두 번째 인수로 2를 제공해야 합니다. 예: round(3.14159, 2).
format() 함수는 어떻게 숫자를 소수점 둘째 자리까지 반올림하는 데 사용되나요?
format() 함수는 지정한 소수 자릿수로 숫자를 반올림하고, 서식화된 문자열로 표시하는 데 사용됩니다.
round half to even이란 무엇인가요?
짝수 쪽 반올림(은행가 반올림)은 숫자가 두 정수의 정확한 중간일 때 가장 가까운 짝수 정수로 반올림하는 방법입니다.
math 모듈로 Python에서 숫자를 소수점 둘째 자리까지 반올림할 수 있나요?
math.floor()와 math.ceil() 함수는 다른 산술 연산과 함께 사용해야 지정한 소수 자릿수로 반올림할 수 있습니다.
왜 round(2.675, 2)는 2.68이 아니라 2.67을 반환하나요?
이는 부동소수점 정밀도 문제입니다. 2.675 값은 이진 부동소수점(IEEE 754)으로 정확히 표현될 수 없으며, 저장된 값이 2.675보다 약간 작기 때문에 Python은 2.67로 내림 반올림합니다.
금융 코드에서 이를 피하려면 명시적 반올림 모드와 함께 decimal 모듈을 사용하세요: Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)은 기대한 대로 2.68을 반환합니다.
pandas DataFrame의 모든 값을 소수점 둘째 자리까지 반올림하려면 어떻게 하나요?
DataFrame 또는 Series에서 .round() 메서드를 사용하세요. 단일 열을 반올림하려면: df["price"] = df["price"].round(2). 모든 수치 열을 한 번에 반올림하려면: df = df.round(2).