it-swarm.com.ru

Округлить число с плавающей запятой до ближайшего целого числа?

Как следует из названия, я хочу взять число с плавающей запятой и округлить его до ближайшего целого числа. Однако, если это не целое, я ВСЕГДА хочу округлить переменную, независимо от того, насколько она близка к следующему целому числу. Есть ли способ сделать это?

82
Anthony Perez

Просто

print int(x)

будет работать так же.

128
Makaveli

Один из них должен работать:

import math
math.trunc(1.5)
> 1
math.trunc(-1.5)
> -1
math.floor(1.5)
> 1
math.floor(-1.5)
> -2
62
U2EF1
x//1

Оператор // возвращает этаж подразделения. Поскольку деление на 1 не меняет вашего числа, это эквивалентно полу, но импорт не требуется. Заметки:
1) Возвращает число с плавающей точкой
2) Это округляет к -∞

26
Huy D

Чтобы получить результат с плавающей запятой, просто используйте:

round(x-0.5)

Это работает и для отрицательных чисел.

25
DmitryG

Я думаю, что вам нужна функция пола:

Math.floor (х)

24
voidMainReturn

многие люди говорят, чтобы использовать:

        int(x)

и это работает нормально для большинства случаев, но есть небольшая проблема. Если результат ОП:

     x = 1.9999999999999999

это будет округлять до

     x = 2

после 16-го 9 он будет округляться. Это не имеет большого значения, если вы уверены, что никогда не встретите такую ​​вещь. Но это то, что нужно иметь в виду.

6
lokilindo

Если вы не хотите импортировать математику, вы можете использовать:

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.
6
Tyler

Если вы работаете с 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.

2
Mr Poin

Не знаю, решили ли вы это, но я наткнулся на этот вопрос. Если вы хотите избавиться от десятичных точек, вы можете использовать int (x), и это исключит все десятичные цифры. Нет необходимости использовать раунд (х).

1
Gaahbon

Просто сделайте округление (х-0,5), это всегда будет возвращать следующее округленное до целочисленного значения значение вашего Float. Вы также можете легко округлить до круглого (х + 0,5)

0
Dominic Nagel

Это может быть очень просто, но не могли бы вы просто округлить его до минус 1? Например:

number=1.5
round(number)-1
> 1
0
user3645688