[python] 파이썬에서 숫자를 어떻게 반올림합니까?

이 문제는 나를 죽이고있다. 파이썬에서 하나의 숫자를 어떻게 올립니까?

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))


답변

나는이 답변이 옛날부터 질문에 대한 것이라는 것을 알고 있지만 수학을 가져오고 싶지 않고 그냥 반올림하고 싶다면 이것이 효과적입니다.

>>> 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를 많이 사용하고 언급되지 않은 것에 놀랐지 만 물론 허용 된 답변은 완벽하게 작동합니다.


답변

math.ceil반올림에 사용 :

>>> 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)))