programing

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

telecom 2023. 7. 19. 21:11
반응형

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

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

int(x)

정수로 변환하면 다음과 같이 잘립니다(0.0 방향).math.trunc.
음수가 아닌 숫자의 경우 아래쪽입니다.

숫자가 음수일 수 있는 경우와 달리 크기를 아래로 반올림합니다.math.floor-Infinity를 향해 반올림하여 값을 낮춥니다.(긍정적이거나 부정적임).

파이썬 정수는 임의의 정밀도이기 때문에 매우 큰 플로트도 정수로 표현될 수 있습니다. (이 관용구가 정수 유형의 가장 큰 값보다 큰 플로트에 대해 실패할 수 있는 다른 언어와 달리)

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

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. 이는 -방향으로 회전합니다.

부동 소수점 결과를 얻으려면 다음을 사용합니다.

round(x-0.5)

그것은 음수에도 효과가 있습니다.

플로어 기능이 필요할 것 같습니다.

수학.플로어(x)

많은 사람들이 사용하라고 말합니다.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모듈.

반올림(x-0.5)만 하면 항상 플로트의 다음 반올림된 정수 값이 반환됩니다.또한 두 라운드(x+0.5)별로 쉽게 정리할 수 있습니다.

당신이 이것을 풀었는지는 모르겠지만, 저는 이 질문을 우연히 발견했습니다.소수점을 없애고 싶다면 int(x)를 사용하면 모든 소수점을 없앨 수 있습니다.반올림(x)을 사용할 필요가 없습니다.

아주 간단할 수도 있지만, 그냥 마이너스 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

반응형