Python round() 함수와 예제

⚡ 스마트 요약

Python round() 함수는 부동 소수점 또는 정수 값을 지정된 소수점 자릿수로 반올림하여 반환하는 내장 함수입니다. 동점일 경우 가장 가까운 짝수로 반올림하는 은행가 반올림 방식을 사용합니다.

  • 🔘 구문 : round(number, ndigits) 함수는 반올림할 값과 선택적으로 자릿수를 지정할 수 있으며, 기본값은 0입니다.
  • ☑️ 반환 유형: ndigits를 생략하면 정수가 반환되고, ndigits를 제공하면 부동 소수점이 반환됩니다.
  • 은행가 반올림: 중간값은 가장 가까운 짝수로 반올림되므로 round(2.5)는 2를 반환합니다.
  • 🧪 음수: 반올림은 음수에도 적용되어 -2.8은 -3으로, -1.5는 -2로 바뀝니다.
  • 🛠️ 정밀 도구: decimal 모듈과 NumPy의 round() 함수는 고정 정밀도 및 배열 반올림을 처리합니다.
  • 🤖 AI 워크플로우: 머신러닝 코드는 더 깔끔한 로깅과 보고서를 위해 지표, 확률 및 가중치를 반올림합니다.

Python 라운드() 함수

round() 함수는 무엇인가요? Python?

Python round()는 내장 함수입니다. Python이 함수는 입력된 소수점 자릿수까지 반올림된 부동 소수점 숫자를 반환합니다.

반올림할 소수 자릿수가 지정되지 않으면 0으로 간주되어 가장 가까운 정수로 반올림합니다.

통사론

round(float_num, num_of_decimals)

파라미터

  • float_num: 반올림할 소수점 숫자입니다.
  • 소수점 이하 자릿수: (선택 사항) 반올림 시 고려할 소수점 자릿수입니다. 이 값은 선택 사항이며, 지정하지 않으면 기본값은 0이고 가장 가까운 정수로 반올림됩니다.

기술설명

round() 메서드는 두 개의 인수를 받습니다.

  • 반올림할 숫자와
  • 반올림하는 동안 고려해야 할 소수 자릿수입니다.

두 번째 인수는 선택 사항이며 지정하지 않으면 기본값은 0입니다. 이 경우 가장 가까운 정수로 반올림되며 반환 유형 또한 정수입니다.

소수 자릿수, 즉 두 번째 인수가 있으면 주어진 자릿수로 반올림됩니다. 반환 유형은 부동 소수점입니다.

주어진 소수점 이하 자릿수가 다음과 같을 경우:

  • 5 이상이면 최종 값에 +1이 더해집니다.
  • < 5인 경우, 최종 값은 언급된 소수점 자릿수까지 그대로 반환됩니다.

반환 값

소수점 이하 자릿수가 지정되지 않으면 정수 값을 반환하고, 지정되면 부동 소수점 값을 반환합니다. 소수점 이하 자릿수가 5 이상이면 값은 1을 더하여 반올림되고, 그렇지 않으면 지정된 소수점 이하 자릿수까지 그대로 반환됩니다.

반올림은 얼마나 많은 영향을 미칠 수 있나요? (반올림 대 잘림)

반올림의 영향을 보여주는 가장 좋은 예는 주식 시장입니다. 과거, 즉 1982년에는 밴쿠버 증권 거래소 (VSE)는 예전에는 각 거래에서 주식 가격을 소수점 셋째 자리까지 반올림했습니다.

이 작업은 매일 거의 3000번씩 수행되었습니다. 누적된 잘림 현상으로 인해 한 달에 약 25점의 손실이 발생했습니다.

값을 자르는 것과 반올림하는 것의 예가 아래에 나와 있습니다.

아래에 생성된 부동 소수점 숫자를 주식 가치로 간주하십시오. 현재 저는 0.01에서 0.05 사이의 범위에서 1,000,000초 동안 이 숫자를 생성하고 있습니다.

예 :

arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]

반올림의 영향을 보여주기 위해, 먼저 소수점 셋째 자리까지만 숫자를 사용하는 간단한 코드를 작성했습니다. 즉, 소수점 셋째 자리까지만 숫자를 버리는 것입니다.

원래 총값, 잘린 값에서 나온 총값, 그리고 원래 값과 잘린 값의 차이가 있습니다.

동일한 숫자 집합에 대해 round() 메서드를 사용하여 소수점 셋째 자리까지 반올림하고, 원래 값과 반올림된 값의 합과 차이를 계산했습니다.

다음은 예시와 출력 결과입니다.

예제 1

import random

def truncate(num):
    return int(num * 1000) / 1000

arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]
sum_num = 0
sum_truncate = 0
for i in arr:
    sum_num = sum_num + i  
    sum_truncate = truncate(sum_truncate + i)
  
print("Testing by using truncating upto 3 decimal places")
print("The original sum is = ", sum_num)
print("The total using truncate = ", sum_truncate)
print("The difference from original - truncate = ", sum_num - sum_truncate)

print("\n\n")
print("Testing by using round() upto 3 decimal places")
sum_num1 = 0
sum_truncate1 = 0
for i in arr:
    sum_num1 = sum_num1 + i  
    sum_truncate1 = round(sum_truncate1 + i, 3)

print("The original sum is =", sum_num1)
print("The total using round = ", sum_truncate1)
print("The difference from original - round =", sum_num1 - sum_truncate1)

출력:

Testing by using truncating upto 3 decimal places
The original sum is =  29985.958619386867
The total using truncate =  29486.057
The difference from original - truncate =  499.9016193868665

Testing by using round() up to 3 decimal places
The original sum is = 29985.958619386867
The total using round =  29985.912
The difference from original - round = 0.04661938686695066

원래 값과 잘린 값의 차이는 499.9016193868665이고, round() 함수를 사용하면 0.04661938686695066이 됩니다.

차이가 상당히 큰 것 같으며, 예시를 통해 round() 메서드가 정확도에 가까운 값을 계산하는 데 어떻게 도움이 되는지 알 수 있습니다.

예: 반올림 부동소수점 Numbers

이 프로그램에서는 부동 소수점 숫자에 대한 반올림이 어떻게 작동하는지 살펴보겠습니다.

# testing round()

float_num1 = 10.60 # here the value will be rounded to 11 as after the decimal point the number is 6 that is >5

float_num2 = 10.40 # here the value will be rounded to 10 as after the decimal point the number is 4 that is <=5

float_num3 = 10.3456 # here the value will be 10.35 as after the 2 decimal points the value >=5

float_num4 = 10.3445 #here the value will be 10.34 as after the 2 decimal points the value is <5

print("The rounded value without num_of_decimals is :", round(float_num1))
print("The rounded value without num_of_decimals is :", round(float_num2))
print("The rounded value with num_of_decimals as 2 is :", round(float_num3, 2))
print("The rounded value with num_of_decimals as 2 is :", round(float_num4, 2))

출력:

The rounded value without num_of_decimals is : 11
The rounded value without num_of_decimals is : 10
The rounded value with num_of_decimals as 2 is : 10.35
The rounded value with num_of_decimals as 2 is : 10.34

예: 정수 값 반올림

정수 값에 round()를 사용하면 아무런 변경 없이 숫자만 반환됩니다.

# testing round() on a integer

num = 15

print("The output is", round(num))

출력:

The output is 15

예: 음수 반올림 Numbers

음수에 대한 반올림이 어떻게 작동하는지 몇 가지 예를 살펴보겠습니다.

# testing round()

num = -2.8
num1 = -1.5
print("The value after rounding is", round(num))
print("The value after rounding is", round(num1))

출력:

C:\pythontest>python testround.py
The value after rounding is -3
The value after rounding is -2

예시: NumPy 배열 반올림

NumPy 값을 어떻게 반올림하나요? 배열 Python?

이 문제를 해결하기 위해 NumPy 모듈의 numpy.round() 또는 numpy.around() 메서드를 사용할 수 있습니다. 아래 예시를 참조하십시오.

numpy.round() 사용

# testing round()
import numpy as np

arr = [-0.341111, 1.455098989, 4.232323, -0.3432326, 7.626632, 5.122323]

arr1 = np.round(arr, 2)

print(arr1)

출력:

C:\pythontest>python testround.py
[-0.34  1.46  4.23 -0.34  7.63  5.12]

위에서 보여준 numpy.round()와 동일한 결과를 제공하는 numpy.around()를 사용할 수도 있습니다.

예: 십진수 모듈

round() 함수 외에도, Python 소수점을 보다 정확하게 처리하는 데 도움이 되는 소수점 모듈이 있습니다.

소수 모듈에는 아래와 같이 다양한 반올림 유형이 포함되어 있습니다.

  • 원형 천장: 그것은 무한대를 향해 둥글게 될 것입니다.
  • 라운드다운: 값은 0에 가깝게 반올림됩니다.
  • 원형 바닥: 반올림하면 -무한대가 됩니다.
  • 라운드 하프 다운: 0에 가장 가까운 값으로 반올림됩니다.
  • 라운드 하프 이븐: 가장 가까운 짝수 정수로 반올림됩니다.
  • 반올림: 0에서 멀어지는 방향으로 가장 가까운 값으로 반올림됩니다.
  • 요약: 값이 0에서 멀어지는 지점에서 반올림됩니다.

십진수에서 퀀타이즈() 메서드는 고정된 소수 자릿수로 반올림하는 데 도움이 되며 아래 예제와 같이 사용할 반올림을 지정할 수 있습니다.

예: round() 및 소수 메소드 사용

import  decimal
round_num = 15.456

final_val = round(round_num, 2)

#Using decimal module
final_val1 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_CEILING)
final_val2 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_DOWN)
final_val3 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_FLOOR)
final_val4 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_DOWN)
final_val5 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_EVEN)
final_val6 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_UP)
final_val7 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP)

print("Using round()", final_val)
print("Using Decimal - ROUND_CEILING ",final_val1)
print("Using Decimal - ROUND_DOWN ",final_val2)
print("Using Decimal - ROUND_FLOOR ",final_val3)
print("Using Decimal - ROUND_HALF_DOWN ",final_val4)
print("Using Decimal - ROUND_HALF_EVEN ",final_val5)
print("Using Decimal - ROUND_HALF_UP ",final_val6)
print("Using Decimal - ROUND_UP ",final_val7)

출력:

Using round() 15.46
Using Decimal - ROUND_CEILING  15.46
Using Decimal - ROUND_DOWN  15.45
Using Decimal - ROUND_FLOOR  15.45
Using Decimal - ROUND_HALF_DOWN  15.46
Using Decimal - ROUND_HALF_EVEN  15.46
Using Decimal - ROUND_HALF_UP  15.46
Using Decimal - ROUND_UP  15.46

자주 묻는 질문

그렇지 않습니다. Python 3은 동점일 경우 반올림(은행가 반올림)을 사용하므로 round(0.5)는 0, round(2.5)는 2, round(3.5)는 4가 됩니다. 이는 누적 편향을 줄입니다.

2.675는 이진 부동 소수점 형식으로 정확하게 저장할 수 없습니다. 실제로는 약 2.6749999999999998로 저장되므로 round() 함수는 내림합니다. 정확한 결과를 얻으려면 decimal.Decimal('2.675')를 사용하십시오.

math 모듈을 사용하세요. math.ceil(x)는 항상 올림하고, math.floor(x)는 항상 내림하며, int(x)는 0에 가깝게 버립니다. round() 함수 자체는 올림 방향을 고정할 수 없습니다.

두 번째 인수로 음수를 전달하세요. round(12345, -1)은 12340, round(12345, -2)는 12300, round(12345, -3)은 12000을 반환합니다. 음수 ndigits는 소수점 왼쪽을 기준으로 반올림합니다.

`round(x, 2)`는 이후 계산에 사용되는 값을 변경하는 반면, `f'{x:.2f}'`는 숫자는 그대로 유지하고 표시 형식만 변경합니다. 계산에는 `round()`를 사용하고 출력에는 `f-string`을 사용하세요.

그렇지 않습니다. Numbers 변수는 불변이므로 round() 함수는 입력값을 변경하지 않고 새로운 값을 반환합니다. 예를 들어 result = round(3.14159, 2)와 같이 값을 할당하면 원래 변수는 원래의 정밀도를 그대로 유지합니다.

머신러닝 코드는 가독성을 높이고 예측값을 클래스 레이블에 매핑하기 위해 정확도, 손실, 확률 값을 반올림합니다. 기울기 계산에는 전체 정밀도를 유지하고 최종적으로 표시되는 지표만 반올림합니다.

예. GitHub Copilot과 같은 AI 비서는 주석이나 함수 이름에서 round(), np.round() 및 소수점 반올림을 자동 완성하고, 에이전트 도구는 수동 서식 지정을 round() 호출로 리팩토링하지만, 선택한 정밀도는 여전히 검토가 필요합니다.

이 게시물을 요약하면 다음과 같습니다.