Округлить число с плавающей точкой до ближайшего целого числа?
Как следует из названия, я хочу взять число с плавающей запятой и округлить его до ближайшего целого числа. Однако, если это не целое, я ВСЕГДА хочу округлить переменную, независимо от того, насколько она близка к следующему целому числу. Есть ли способ сделать это?
12 ответов
Один из них должен работать:
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)
Это работает и для отрицательных чисел.
Многие люди говорят, чтобы использовать:
int(x)
и это работает нормально в большинстве случаев, но есть небольшая проблема. Если результат ОП:
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.
Просто сделайте округление (х-0,5), это всегда вернет следующее округленное до целочисленного значения значение вашего числа с плавающей запятой. Вы также можете легко округлить до круглого (х +0,5)
Если вы работаете с 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
модуль.
Не знаю, решили ли вы это, но я просто наткнулся на этот вопрос. Если вы хотите избавиться от десятичных точек, вы можете использовать int(x), и это исключит все десятичные цифры. Нет необходимости использовать раунд (х).
Это может быть очень просто, но не могли бы вы просто округлить его до минус 1? Например:
number=1.5
round(number)-1
> 1
Я использовал этот код, где вы вычитаете 0,5 из числа, а когда вы округляете его, это оригинальное число, округленное в меньшую сторону.
круглая (а-0,5)