숫자를 어떻게 반올림합니까?
Python에서는 어떻게 숫자를 올림합니까?
는 는 i i는노노 i i i i i.round(number)
§:
round(2.3) = 2.0
3개 말고, 제가 원하는 대로요.
는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★.int(number + .5)
들면 다음과 같습니다.§:
int(2.3 + .5) = 2
math.ceil(천장) 함수는 다음과 같은 최소 정수를 반환합니다.x
.
Python 3의 경우:
import math
print(math.ceil(4.2))
Python 2의 경우:
import math
print(int(math.ceil(4.2)))
이 답변은 예전부터 있었던 질문이라는 것을 알고 있습니다만, 수학은 Import하지 않고 반올림만 하고 싶은 경우에는 이쪽이 좋습니다.
>>> int(21 / 5)
4
>>> int(21 / 5) + (21 % 5 > 0)
5
첫 번째 부분은 4가 되고 두 번째 부분은 나머지가 있으면 "참"으로 평가되며, 참 = 1, 거짓 = 0입니다. 따라서 나머지가 없으면 같은 정수를 유지하지만 나머지가 있으면 1을 더합니다.
유의해야 할 흥미로운 Python 2.x 문제:
>>> import math
>>> math.ceil(4500/1000)
4.0
>>> math.ceil(4500/1000.0)
5.0
문제는 python에서 2개의 int를 분할하면 다른 int가 생성되어 상한 호출 전에 잘린다는 것입니다.올바른 결과를 얻으려면 하나의 값을 부동(또는 주조)으로 만들어야 합니다.
javascript에서는 동일한 코드가 다른 결과를 생성합니다.
console.log(Math.ceil(4500/1000));
5
정수로 중 는 반올림이라는 입니다.//
반올림: 음수를 나눗셈하고 답을 부정합니다.Import, import, import, import, import, import, import, import, import, import, import, import.
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)
아무도 제안하지 않았다니 놀랍다
(numerator + denominator - 1) // denominator
반올림을 포함한 정수 나눗셈의 경우.C/C++/CUDA(cf)의 경우 divup
)
그 구문은 마음에 드는 것처럼 비단어적인 것은 아닐지 모르지만, 그것은 강력한 도서관이다.
https://docs.python.org/2/library/decimal.html
from decimal import *
print(int(Decimal(2.3).quantize(Decimal('1.'), rounding=ROUND_UP)))
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
★★★★★★a
★★★★★★★★★★★★★★★★★」b
.
이것을 시험해 보세요.
a = 211.0
print(int(a) + ((int(a) - a) != 0))
Shure 반올림 값은 부동이어야 합니다.
a = 8
b = 21
print math.ceil(a / b)
>>> 0
그렇지만
print math.ceil(float(a) / b)
>>> 1.0
맞지만, 다음과 같습니다.math
이 기능 하나만을 위한 모듈은 보통 제게는 좀 오버킬처럼 느껴집니다.하다
g = 7/5
g = int(g) + (not g.is_integer())
True
★★★★★★★★★★★★★★★★★」False
라고 1
★★★★★★★★★★★★★★★★★」0
python 。 g.is_interger()
으로는 「」로 변환됩니다.g.has_no_decimal()
★★★★★★★★★★★★★★★★★」g == int(g)
그래서 마지막 영어 문장은 다음과 같다.round g down and add one if g has decimal
.
특정 소수점 이하 자리까지 반올림하려는 사람이 있는 경우:
import math
def round_up(n, decimals=0):
multiplier = 10 ** decimals
return math.ceil(n * multiplier) / multiplier
기본 환경을 사용하여 산술 // 가져오기 안 함:
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
이 기능에는 모듈이 필요하지 않습니다.
.modulo
★★★★★★★★★★★★★★★★★」bool
n = 2.3
int(n) + bool(n%1)
출력:
3
x * -1 // 1 * -1
혼란스럽지만 효과가 있습니다.★★★의 x=7.1
하면, 이렇게 됩니다.8.0
★★★★의 x = -1.1
하면, 이렇게 됩니다.-1.0
모듈을 Import할 필요가 없습니다.
Import를 사용하지 않으시는 분들을 위해.
특정 목록 또는 임의의 번호에 대해:
x = [2, 2.1, 2.5, 3, 3.1, 3.5, 2.499,2.4999999999, 3.4999999,3.99999999999]
먼저 숫자가 항상 반올림되는 정수와 동일한지 여부를 평가해야 합니다.결과가 True이면 숫자를 반환하고 그렇지 않으면 정수(숫자) + 1을 반환합니다.
w = lambda x: x if x == int(x) else int(x)+1
[w(i) for i in z]
>>> [2, 3, 3, 3, 4, 4, 3, 3, 4, 4]
산술 논리:
- 숫자에 10진수 부분(round_up - round_down == 1)이 있는 경우 항상 1이어야 합니다.
- 숫자에 소수 부분이 없는 경우: round_up - round_down == 0.
그래서:
- round_up == x + round_down
포함:
- x == 1(숫자!= round_down인 경우
- x == 0(숫자== round_down인 경우)
정수와 소수 두 부분으로 나누어서 숫자를 자릅니다.소수점이 0이 아니면 1을 더합니다.
PS: 위의 댓글에서 그것을 요구받았기 때문에 자세히 설명했습니다만, 저는 아직 여기 있기 때문에 코멘트는 할 수 없습니다.
아무것도 Import 하지 않는 경우는, 다음과 같이 간단한 함수를 작성할 수 있습니다.
def RoundUP(num):
if num== int(num):
return num
return int(num + 1)
다음과 같이 라운드를 사용할 수 있습니다.
cost_per_person = round(150 / 2, 2)
Import를 하지 않고 실행하는 방법:
>>> 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)
이렇게 하면 가장자리 케이스가 수정되고 양수 및 음수 모두에 대해 작동하며 함수를 가져올 필요가 없습니다.
건배.
이 을 못 round(x + 0.4999)
내려놓을게요.이것은 Python 버전에 관계없이 동작합니다.Python 반올림 방식에 대한 변경으로 인해 작업이 어려워졌습니다.이 투고를 참조해 주세요.
Import하지 않고 다음을 사용합니다.
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)))
기능하는 이유
문서에서
라운드()를 지원하는 삽입형에서는 값이 10의 제곱에서 n을 뺀 배수에 가장 가까운 값으로 반올림됩니다.두 배수가 동등하게 가까우면 짝수 선택을 향해 반올림됩니다.
따라서 2.5는 2로 반올림되고 3.5는 4로 반올림됩니다.그렇지 않은 경우 0.5를 더하면 반올림할 수 있지만 중간 지점에 도달하는 것은 피하고 싶습니다.따라서 0.4999를 더하면 근접하지만 여백이 충분하여 보통 예상대로 반올림할 수 있습니다.물론, 이 작업은 실패한다.x + 0.4999
와 동등하다[n].5000
하지만 그럴 가능성은 낮습니다.
Floor Devision을 사용하여 1을 추가할 수 있습니다. 2.3 // 2 + 1
python에서 4500/1000을 조작하면 결과는 4가 됩니다.기본 python asume의 경우 논리적으로 4500/1000 = 4.5 --> int(4.5) = 4이고 ceilley는 4이기 때문입니다.
4500/1000.0을 사용하면 결과는 4.5, ceil은 4.5 --> 5가 됩니다.
javascript를 사용하면 4500/1000 결과 4.5를 얻을 수 있습니다. javascript는 결과만 "숫자형"으로 보고 결과를 플로트로 직접 반환하기 때문입니다.
행운을 빈다!!
제 생각엔 당신이 작업 메커니즘을 혼란스럽게 하고 있는 것 같아요int()
그리고.round()
.
int()
는 부동수가 지정되면 항상 10진수를 잘라냅니다.round()
의 경우2.5
어디에2
그리고.3
둘 다 같은 거리에 있다2.5
Python은 0 포인트보다 더 멀리 있는 것을 반환합니다.
round(2.5) = 3
int(2.5) = 2
내 몫
테스트했습니다.print(-(-101 // 5)) = 21
를 참조해 주세요.
반올림:
101 * 19% = 19.19
사용할 수 없습니다**
그래서 곱셈을 나눗셈으로 확산시켰습니다.
(-(-101 //(1/0.19))) = 20
저는 기본적으로 Python의 초보자이지만, 다운이 아니라 반올림만 하려고 한다면, 왜 그렇게 하지 않겠습니까?
round(integer) + 1
언급URL : https://stackoverflow.com/questions/2356501/how-do-you-round-up-a-number
'source' 카테고리의 다른 글
문자의 ASCII 값을 가져오는 방법 (0) | 2022.11.13 |
---|---|
잘못된 종류의 값을 보유한 키에 대한 WORLTYPE 작업 php (0) | 2022.11.13 |
matplotlib 오류 - tkinter라는 이름의 모듈이 없습니다. (0) | 2022.11.13 |
Python "SyntaxError: 비ASC파일의 II 문자 '\xe2' (0) | 2022.11.05 |
페이지를 새로 고치지 않고 JavaScript를 사용하여 window.location(URL)에서 해시를 삭제하려면 어떻게 해야 합니까? (0) | 2022.11.05 |