부동 소수점 숫자를 가장 가까운 정수로 반올림하시겠습니까?
부동소수점 숫자를 가장 가까운 정수로 반올림하고 싶습니다.그러나 전체가 아닌 경우 변수가 다음 정수에 얼마나 가까운지에 관계없이 항상 반올림하고 싶습니다.이것을 할 수 있는 방법이 있습니까?
int(x)
정수로 변환하면 다음과 같이 잘립니다(0.0 방향).math.trunc
.
음수가 아닌 숫자의 경우 아래쪽입니다.
숫자가 음수일 수 있는 경우와 달리 크기를 아래로 반올림합니다.math.floor
-Infinity를 향해 반올림하여 값을 낮춥니다.(긍정적이거나 부정적임).
파이썬 정수는 임의의 정밀도이기 때문에 매우 큰 플로트도 정수로 표현될 수 있습니다. (이 관용구가 정수 유형의 가장 큰 값보다 큰 플로트에 대해 실패할 수 있는 다른 언어와 달리)
다음 중 하나가 작동해야 합니다.
import math
math.trunc(1.5)
> 1
math.trunc(-1.5)
> -1
math.floor(1.5)
> 1
math.floor(-1.5)
> -2
x//1
그//
연산자가 분할의 바닥을 반환합니다.1로 나누어도 숫자가 바뀌지 않기 때문에 바닥과 같으나 가져올 필요는 없습니다.주의:
- 플로트를 반환합니다.
- 이는 -방향으로 회전합니다.
부동 소수점 결과를 얻으려면 다음을 사용합니다.
round(x-0.5)
그것은 음수에도 효과가 있습니다.
플로어 기능이 필요할 것 같습니다.
많은 사람들이 사용하라고 말합니다.int(x)
그리고 이것은 대부분의 경우에 잘 작동하지만 약간의 문제가 있습니다.OP의 결과가 다음과 같은 경우:
x = 1.9999999999999999
로 반올림할 것입니다.
x = 2
16일 9일 이후에 그것은 회전할 것입니다.만약 여러분이 절대 그런 것을 마주치지 않을 것이라고 확신한다면 이것은 큰 문제가 아닙니다.하지만 그것은 명심해야 할 것입니다.
수학을 가져오지 않으려면 다음을 사용할 수 있습니다.
int(round(x))
다음은 문서입니다.
>>> help(round)
Help on built-in function round in module __builtin__:
round(...)
round(number[, ndigits]) -> floating point number
Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number. Precision may be negative.
numpy로 작업하는 경우 음수에서도 작동하는 다음 솔루션을 사용할 수 있습니다(어레이에서도 작동함).
import numpy as np
def round_down(num):
if num < 0:
return -np.ceil(abs(num))
else:
return np.int32(num)
round_down = np.vectorize(round_down)
round_down([-1.1, -1.5, -1.6, 0, 1.1, 1.5, 1.6])
> array([-2., -2., -2., 0., 1., 1., 1.])
저는 당신이 그냥 사용하는 것 같아요.math
대신 모듈numpy
모듈.
반올림(x-0.5)만 하면 항상 플로트의 다음 반올림된 정수 값이 반환됩니다.또한 두 라운드(x+0.5)별로 쉽게 정리할 수 있습니다.
당신이 이것을 풀었는지는 모르겠지만, 저는 이 질문을 우연히 발견했습니다.소수점을 없애고 싶다면 int(x)를 사용하면 모든 소수점을 없앨 수 있습니다.반올림(x)을 사용할 필요가 없습니다.
아주 간단할 수도 있지만, 그냥 마이너스 1로 반올림하면 안 될까요?예:
number=1.5
round(number)-1
> 1
저는 이 코드를 사용하여 숫자에서 0.5를 빼고 반올림하면 원래 숫자가 됩니다.
원형(a-0.5)
언급URL : https://stackoverflow.com/questions/17141979/round-a-floating-point-number-down-to-the-nearest-integer
'programing' 카테고리의 다른 글
각각 하위 명령 집합이 있는 클릭 명령을 여러 파일로 분할하려면 어떻게 해야 합니까? (0) | 2023.07.24 |
---|---|
터미널에서 Python Script 명령 실행 (0) | 2023.07.19 |
SQL Server 2008 백업 오류 - 운영 체제 오류 5(이 오류에 대한 텍스트를 검색하지 못했습니다.이유: 15105) (0) | 2023.07.19 |
Excel VBA - 순차적이지 않은 열을 여러 개 선택합니다. (0) | 2023.07.19 |
로깅을 사용하여 pprint 출력 인쇄 (0) | 2023.07.19 |