이 문제는 나를 죽이고있다. 파이썬에서 하나의 숫자를 어떻게 올립니까?
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!
조언 부탁드립니다.
답변
답변
나는이 답변이 옛날부터 질문에 대한 것이라는 것을 알고 있지만 수학을 가져오고 싶지 않고 그냥 반올림하고 싶다면 이것이 효과적입니다.
>>> int(21 / 5)
4
>>> int(21 / 5) + (21 % 5 > 0)
5
첫 번째 부분은 4가되고 나머지 부분이있는 경우 두 번째 부분은 “참”으로 평가되며, 추가로 True = 1; False = 0. 따라서 나머지가 없으면 동일한 정수를 유지하지만 나머지가 있으면 1을 더합니다.
답변
기억해야 할 흥미로운 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
답변
정수로 작업하는 경우 반올림하는 한 가지 방법은 반올림한다는 사실을 이용하는 것입니다 //
. 음수로 나누고 답을 부정하십시오. 가져 오기, 부동 소수점 또는 조건부 필요가 없습니다.
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)))