파이썬에서 숫자를 어떻게 반올림합니까?
이 문제는 나를 죽이고있다. 파이썬에서 하나의 숫자를 어떻게 올립니까?
나는 round (number)를 시도했지만 숫자를 내림합니다. 예:
round(2.3) = 2.0 and not 3, what I would like
나는 int (number + .5)를 시도했지만 숫자를 다시 내림합니다! 예:
int(2.3 + .5) = 2
그런 다음 round (number + .5)를 시도했지만 가장자리 경우에는 작동하지 않습니다. 예:
WAIT! THIS WORKED!
조언 부탁드립니다.
CEIL (천장) 기능 :
import math
print(math.ceil(4.2))
염두에 두어야 할 흥미로운 Python 2.x 문제 :
>>> import math
>>> math.ceil(4500/1000)
4.0
>>> math.ceil(4500/1000.0)
5.0
문제는 파이썬에서 두 개의 정수를 나누면 또 다른 정수가 생성되고 상한 호출 전에 잘립니다. 올바른 결과를 얻으려면 하나의 값을 부동 (또는 캐스트)으로 만들어야합니다.
자바 스크립트에서 정확히 동일한 코드는 다른 결과를 생성합니다.
console.log(Math.ceil(4500/1000));
5
나는이 답변이 옛날부터 질문에 대한 것이라는 것을 알고 있지만 수학을 가져오고 싶지 않고 그냥 반올림하고 싶다면 이것이 효과적입니다.
>>> int(21 / 5)
4
>>> int(21 / 5) + (21 % 5 > 0)
5
첫 번째 부분은 4가되고 나머지 부분이있는 경우 두 번째 부분은 "참"으로 평가되며, True = 1입니다. False = 0. 따라서 나머지가 없으면 동일한 정수를 유지하지만 나머지가 있으면 1을 더합니다.
정수로 작업하는 경우 반올림하는 한 가지 방법은 반올림한다는 사실을 이용하는 것입니다 //
. 음수로 나누고 답을 부정하십시오. 가져 오기, 부동 소수점 또는 조건부 필요가 없습니다.
rounded_up = -(-numerator // denominator)
예를 들면 다음과 같습니다.
>>> print(-(-101 // 5))
21
numpy를 좋아할 수도 있습니다.
>>> import numpy as np
>>> np.ceil(2.3)
3.0
수학보다 낫다는 말은 아니지만 이미 다른 목적으로 numpy를 사용하고 있다면 코드 일관성을 유지할 수 있습니다.
어쨌든, 내가 만난 세부 사항. 나는 numpy를 많이 사용하고 언급되지 않은 것에 놀랐지 만 물론 받아 들인 대답은 완벽하게 작동합니다.
>>> import math
>>> math.ceil(5.4)
6.0
참고 : 입력은 부동이어야합니다.
정수가 필요하면 호출 int
하여 변환하십시오.
>>> int(math.ceil(5.4))
6
BTW, 사용 math.floor
라운드에 다운 과 round
가장 가까운 정수로 라운드.
>>> math.floor(4.4), math.floor(4.5), math.floor(5.4), math.floor(5.5)
(4.0, 4.0, 5.0, 5.0)
>>> round(4.4), round(4.5), round(5.4), round(5.5)
(4.0, 5.0, 5.0, 6.0)
>>> math.ceil(4.4), math.ceil(4.5), math.ceil(5.4), math.ceil(5.5)
(5.0, 5.0, 6.0, 6.0)
문법은 파이썬처럼 마음에 들지 않지만 강력한 라이브러리입니다.
https://docs.python.org/2/library/decimal.html
from decimal import *
print(int(Decimal(2.3).quantize(Decimal('1.'), rounding=ROUND_UP)))
아무도 제안하지 않은 것에 놀랐습니다
(numerator + denominator - 1) // denominator
반올림하여 정수 나누기. C / C ++ / CUDA의 일반적인 방법으로 사용됨 (참조. divup
)
반올림 된 값은 부동이어야합니다
a = 8
b = 21
print math.ceil(a / b)
>>> 0
그러나
print math.ceil(float(a) / b)
>>> 1.0
이 시도:
a = 211.0
print(int(a) + ((int(a) - a) != 0))
위의 답변은 정확하지만 math
이 함수에 대해서만 모듈을 가져 오는 것은 일반적으로 약간의 잔인한 느낌입니다. 운 좋게도 다른 방법이 있습니다.
g = 7/5
g = int(g) + (not g.is_integer())
True
및 False
로 해석됩니다 1
및 0
파이썬의 숫자를 포함 성명에서. g.is_interger()
기본적으로 g.has_no_decimal()
또는로 번역됩니다 g == int(g)
. 영어의 마지막 문장은 다음과 같습니다 round g down and add one if g has decimal
.
// 기본 환경을 사용하여 수학을 가져 오지 않고 :
a) 방법 / 클래스 방법
def ceil(fl):
return int(fl) + (1 if fl-int(fl) else 0)
def ceil(self, fl):
return int(fl) + (1 if fl-int(fl) else 0)
b) 람다 :
ceil = lambda fl:int(fl)+(1 if fl-int(fl) else 0)
>>> def roundup(number):
... return round(number+.5)
>>> roundup(2.3)
3
>>> roundup(19.00000000001)
20
이 기능은 모듈이 필요하지 않습니다.
반올림하고 a / b
정수를 얻으 려는 사람들을 위해 :
정수 나누기를 사용하는 또 다른 변형은
def int_ceil(a, b):
return (a - 1) // b + 1
>>> int_ceil(19, 5)
4
>>> int_ceil(20, 5)
4
>>> int_ceil(21, 5)
5
이 답변을 아직 보지 못해서 놀랐 round(x + 0.4999)
습니다. 이것은 모든 Python 버전에서 작동합니다. 파이썬 반올림 체계가 변경되어 상황이 어려워졌습니다. 이 게시물을 참조하십시오 .
가져 오기없이 다음을 사용합니다.
def roundUp(num):
return round(num + 0.49)
testCases = list(x*0.1 for x in range(0, 50))
print(testCases)
for test in testCases:
print("{:5.2f} -> {:5.2f}".format(test, roundUp(test)))
왜 이것이 작동 하는가
문서에서
round ()를 지원하는 내장 유형의 경우, 값은 10의 거듭 제곱 n에 가장 가까운 배수로 반올림됩니다. 두 배수가 동일하게 가까운 경우 고른 선택을 향해 반올림됩니다.
따라서 2.5는 2로 반올림되고 3.5는 4로 반올림됩니다. 그렇지 않은 경우 0.5를 추가하여 반올림을 수행 할 수 있지만 중간 지점에 도달하는 것을 피하고 싶습니다. 따라서 0.4999를 더하면 더 가까워 지지만 여백이 반올림되어 정상적으로 예상됩니다. 물론,이 x + 0.4999
같으면 실패 [n].5000
하지만, 그렇지 않습니다.
가져 오기없이 수행하려면 :
>>> round_up = lambda num: int(num + 1) if int(num) != num else int(num)
>>> round_up(2.0)
2
>>> round_up(2.1)
3
나는 이것이 꽤 오래 전이라는 것을 알고 있지만 꽤 흥미로운 답변을 찾았으므로 여기에 간다.
-round(-x-0.5)
이것은 대소 문자를 수정하고 양수와 음수 모두에서 작동하며 함수 가져 오기가 필요하지 않습니다.
건배
파이썬에서 4500/1000을 작동하면 결과는 4가됩니다. 기본 파이썬은 정수로 결과를 논리적으로 가정합니다.
4500 / 1000.0을 사용하면 결과는 4.5이고 ceil은 4.5-> 5입니다.
javascript를 사용하면 4500/1000의 결과로 4.5를받을 수 있습니다. javascript는 결과 만 "숫자 유형"으로 가정하고 결과를 float로 직접 리턴하기 때문입니다.
행운을 빕니다!!
아무것도 가져오고 싶지 않으면 언제든지 다음과 같이 간단한 함수를 작성할 수 있습니다.
def RoundUP(num): if num== int(num): return num return int(num + 1)
평면도를 사용하여 1을 추가 할 수 있습니다. 2.3 // 2 + 1
int()
와 사이의 작동 메커니즘을 혼동하고 있다고 생각합니다 round()
.
int()
부동 숫자가 제공되면 항상 10 진수를 자릅니다. 반면 round()
,시 2.5
곳 2
과 3
행 동일한 거리에 모두 2.5
그 이상 떨어진 지점에서 0 중 파이썬 복귀.
round(2.5) = 3
int(2.5) = 2
내 몫
print(-(-101 // 5)) = 21
위의 예제를 테스트했습니다 .
반올림 :
101 * 19% = 19.19
나는 사용할 수 없으므로 **
곱하기를 나누기로 나눕니다.
(-(-101 //(1/0.19))) = 20
https://docs.python.org/2/library/math.html math.ceil을 찾으십시오
"x의 천장을 x보다 크거나 같은 가장 작은 정수 값인 부동 소수점으로 반환합니다."
나는 기본적으로 Python의 초보자이지만, 대신에 반올림하려고하는 이유는 무엇입니까?
round(integer) + 1
참고 URL : https://stackoverflow.com/questions/2356501/how-do-you-round-up-a-number-in-python
'development' 카테고리의 다른 글
테이블을 잠그지 않고 MySQLDump 실행 (0) | 2020.02.19 |
---|---|
로컬 변경을 무시하면서 힘내? (0) | 2020.02.19 |
Android에서 진행률 표시 줄의 진행 색상을 변경하는 방법 (0) | 2020.02.19 |
"try"- "catch"에서 모든 블록을 래핑해서는 안되는 이유는 무엇입니까? (0) | 2020.02.19 |
동적 라이브러리와 정적 라이브러리를 사용하는 경우 (0) | 2020.02.19 |