Как следует из названия, я хочу взять число с плавающей запятой и округлить его до ближайшего целого числа. Однако, если это не целое, я ВСЕГДА хочу округлить переменную в меньшую сторону, независимо от того, насколько она близка к следующему целому числу вверх. Есть ли способ сделать это?
python
floating-point
integer
rounding
Энтони Перес
источник
источник
Ответы:
просто
тоже будет работать.
источник
int(-23.3) == 23
Один из них должен работать:
источник
math.trunc
- целое число, а выходныеmath.floor
- плавающее.type(math.floor(1.51)) -> int
и поtype(math.trunc(1.51)) -> int
состоянию наpython 3.6.0
//
Оператор возвращает слово деления. Поскольку деление на 1 не меняет вашего числа, это эквивалентно floor, но импорт не требуется. Ноты:источник
int(-1.1) == -1
в то время как-1.1//1 == -2.0
однакоdecimal.Decimal('-1.1')//1 == decimal.Decimal('-1')
(как указано в документации, утверждение 2 неверноdecimal
), поэтому полагаться на то, как//
ведет себя, не является полностью стабильным даже сегодня.Чтобы получить результат с плавающей запятой, просто используйте:
Это также работает для отрицательных чисел.
источник
Думаю, нужна функция пола:
Math.floor (х)
источник
многие люди говорят использовать
int(x)
, и это работает в большинстве случаев, но есть небольшая проблема. Если результат OP:он будет округлен до
после 16-го будет 9 раунд. В этом нет ничего страшного, если вы уверены, что никогда не встретите такую вещь. Но об этом нужно помнить.
источник
1.9999999999999999
фактически равно2.0
во внутреннем представлении float64. I. e. оно уже округлено, как только преобразовано в число с плавающей запятой, поскольку 64-битное число с плавающей запятой не может представлять такое количество значащих цифр. Вы можете убедиться в этом, выполнив оценку1.9999999999999999 == 2.0
. И если вы подозреваете, что операция равенства выполняет некоторое округление с плавающей запятой, вы можете сравнить двоичное представление сstruct.pack("d", 1.9999999999999999) == struct.pack("d", 2.0)
, которое также равно.int()
. Значение уже 2,0, и оноint()
, это связано исключительно с неправильным использованиемfloat
, так как1.9999999999999999
округляется до2.0
во время компиляции (в то время какint()
вызывается во время выполнения). Если вы используете правильный тип данных для переменной, все будет работать должным образом:int(decimal.Decimal('1.9999999999999999999999999999999999999999999999999999999'))
дает1
Если вы не хотите импортировать математику, вы можете использовать:
int(round(x))
Вот часть документации:
источник
round
уже обсуждался и был отклонен как ответ, когда этот вопрос был задан год назад. ОП хочетmath.floor
.Если вы работаете с numpy, вы можете использовать следующее решение, которое также работает с отрицательными числами (оно также работает с массивами)
Думаю, это тоже сработает, если вы просто будете использовать
math
модуль вместоnumpy
модуля.источник
Не знаю, решили ли вы это, но я просто наткнулся на этот вопрос. Если вы хотите избавиться от десятичных знаков, вы можете использовать int (x), и он удалит все десятичные цифры. Нет необходимости использовать round (x).
источник
Просто округлите (x-0,5), это всегда будет возвращать следующее округленное в меньшую сторону целочисленное значение вашего Float. Вы также можете легко округлить до округления (x + 0,5)
источник
Это может быть очень просто, но не могли бы вы просто округлить его до минус 1? Например:
источник
integer
.Я использовал этот код, где вы вычитаете 0,5 из числа, и когда вы его округляете, это исходное число, округленное в меньшую сторону.
источник