IT

부동 소수점 숫자를 가장 가까운 정수로 반올림 하시겠습니까?

lottoking 2020. 8. 24. 20:36
반응형

부동 소수점 숫자를 가장 가까운 정수로 반올림 하시겠습니까?


소수점 숫자를 가장 가까운 정수로 내림하고 싶습니다. 그러나 전체가 아닌 경우 다음 정수에 얼마나 가까운 지에 관계없이 항상 변수를 반올림하고 싶습니다. 이 작업을 수행하는 방법이 있습니까?


단순한

print int(x)

잘 작동합니다.


다음 중 하나가 작동합니다.

import math
math.trunc(1.5)
> 1
math.trunc(-1.5)
> -1
math.floor(1.5)
> 1
math.floor(-1.5)
> -2

x//1

// 연산자는 분할의 바닥을 반환합니다. 1로 나누어도 숫자는 바뀌지 플로어와 동일하지만 오기가 필요하지 않습니다. 참고 :
1) 부동 소수점을 반환합니다.
2) -∞쪽으로 반올림합니다.


바닥 기능이 필요하다고 생각합니다.

math.floor (x)


부동 소수점 결과를 얻으려면 다음을 사용하십시오.

round(x-0.5)

음수 작동이 작동합니다.


많은 사람들이 다음을 사용합니다.

        int(x)

그리고 대부분의 경우에 잘 작동하지만 약간의 문제가 있습니다. OP의 결과가 다음과 같은 경우 :

     x = 1.9999999999999999

그것은

     x = 2

16 일 9 일 이후에는 반올림됩니다. 그런 일을 선언하지 않을 것입니다. 그러나 명심해야 할 사항입니다.


수학을 가져 오기 위해 사용할 수 있습니다.

int(round(x))

다음은 문서입니다.

>>> help(round)
Help on built-in function round in module __builtin__:

round(...)
    round(number[, ndigits]) -> floating point number

    Round a number to a given precision in decimal digits (default 0 digits).
    This always returns a floating point number.  Precision may be negative.

numpy로 작업하는 경우 음수로 작동하는 다음 솔루션을 사용할 수 있습니다 (배열 작동하는 경우)

import numpy as np
def round_down(num):
    if num < 0:
        return -np.ceil(abs(num))
    else:
        return np.int32(num)
round_down = np.vectorize(round_down)

round_down([-1.1, -1.5, -1.6, 0, 1.1, 1.5, 1.6])
> array([-2., -2., -2.,  0.,  1.,  1.,  1.])

math모듈 대신 모듈을 사용하면 작동 할 생각합니다 numpy.


이 문제를 해결했는지 모르겠지만이 질문을 우연히 발견했습니다. 십진수를 모두 제거 할 수 있습니다. round (x)를 사용할 수 없습니다.


make round (x-0.5) 이것은 항상 Float의 다음 반올림 된 Integer 값을 반환합니다. do round (x + 0.5)로 쉽게 반올림 할 수 있습니다.


매우 간단 할 수 있지만, 마이너스 1로 반올림 할 수 없습니까? 예를 들면 :

number=1.5
round(number)-1
> 1

이 코드를 사용하여 숫자에서 0.5를 빼고 반올림하면 원래 숫자를 반올림했습니다.

원형 (a-0.5)

참고 URL : https://stackoverflow.com/questions/17141979/round-a-floating-point-number-down-to-the-nearest-integer

반응형