source

숫자를 어떻게 반올림합니까?

manysource 2022. 11. 13. 19:33

숫자를 어떻게 반올림합니까?

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 ★★★★★★★★★★★★★★★★★」0python 。 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.5Python은 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