Как вы округлите число в Python? - PullRequest
399 голосов
/ 01 марта 2010

Эта проблема убивает меня. Как собрать число UP в Python?

Я попытался округлить (число), но оно округлило число вниз. Пример:

round(2.3) = 2.0 and not 3, what I would like

Я попробовал int (число + .5), но он снова округлил число вниз! Пример:

int(2.3 + .5) = 2

Затем я попытался выполнить округление (число + .5), но в крайних случаях оно не будет работать Пример:

WAIT! THIS WORKED!

Пожалуйста, сообщите.

Ответы [ 23 ]

6 голосов
/ 05 декабря 2017

Попробуйте это:

a = 211.0
print(int(a) + ((int(a) - a) != 0))
5 голосов
/ 05 мая 2017

Приведенные выше ответы верны, однако импорт модуля math только для этой одной функции обычно кажется для меня излишним. К счастью, есть еще один способ сделать это:

g = 7/5
g = int(g) + (not g.is_integer())

True и False интерпретируются как 1 и 0 в выражении, содержащем числа в python g.is_interger() в основном переводится как g.has_no_decimal() или g == int(g). Так что последнее утверждение на английском языке звучит так: round g down and add one if g has decimal.

5 голосов
/ 19 ноября 2017

Без импорта математики // Использование базовых условий:

а) метод / класс метод

def ceil(fl): 
  return int(fl) + (1 if fl-int(fl) else 0)

def ceil(self, fl): 
  return int(fl) + (1 if fl-int(fl) else 0)

б) лямбда:

ceil = lambda fl:int(fl)+(1 if fl-int(fl) else 0)
3 голосов
/ 17 марта 2018

Для тех, кто хочет округлить a / b и получить целое число:

Другой вариант с использованием целочисленного деления -

def int_ceil(a, b):
    return (a - 1) // b + 1

>>> int_ceil(19, 5)
4
>>> int_ceil(20, 5)
4
>>> int_ceil(21, 5)
5
2 голосов
/ 08 сентября 2016

Я удивлен, что я еще не видел этот ответ round(x + 0.4999), поэтому я собираюсь положить его. Обратите внимание, что это работает с любой версией Python. Изменения, внесенные в схему округления Python, усложнили ситуацию. Смотрите это сообщение .

Без импорта я использую:

def roundUp(num):
    return round(num + 0.49)

testCases = list(x*0.1 for x in range(0, 50))

print(testCases)
for test in testCases:
    print("{:5.2f}  -> {:5.2f}".format(test, roundUp(test)))

Почему это работает

Из документов

Для встроенных типов, поддерживающих round (), значения округляются до ближайшего кратного 10 к степени минус n; если два множителя одинаково близки, округление выполняется до четного выбора

Следовательно, 2.5 округляется до 2, а 3.5 округляется до 4. Если этого не произошло, то округление можно было бы сделать, прибавив 0,5, но мы хотим избежать перехода к половине. Таким образом, если вы добавите 0,4999, вы приблизитесь, но с достаточным запасом для округления до того, что вы обычно ожидаете. Конечно, это потерпит неудачу, если x + 0.4999 равно [n].5000, но это маловероятно.

0 голосов
/ 01 июня 2016

Я в основном новичок в Python, но если вы просто пытаетесь округлить вверх, а не вниз, почему бы не сделать:

round(integer) + 1
0 голосов
/ 14 марта 2018

Я думаю, вы путаете рабочие механизмы между int() и round().

int() всегда усекает десятичные числа, если задано плавающее число; тогда как round(), в случае 2.5, где 2 и 3 находятся на одинаковом расстоянии от 2.5, Python возвращает то, что больше от точки 0

round(2.5) = 3
int(2.5) = 2
0 голосов
/ 15 июня 2014

Чтобы сделать это без импорта:

>>> round_up = lambda num: int(num + 1) if int(num) != num else int(num)
>>> round_up(2.0)
2
>>> round_up(2.1)
3
0 голосов
/ 14 января 2015

Я знаю, что это было довольно давно, но я нашел довольно интересный ответ, так что вот так:

-round(-x-0.5)

Это исправляет регистры краев и работает как для положительных, так и для отрицательных чисел, и не требует импорта каких-либо функций

Приветствия

0 голосов
/ 27 апреля 2017

когда вы используете 4500/1000 в python, результат будет равен 4, потому что для python по умолчанию в качестве целочисленного значения присваивается логический результат: 4500/1000 = 4,5 -> int (4,5) = 4 и ceil 4 очевидно 4

при использовании 4500 / 1000.0 результат будет 4.5, а ceil 4.5 -> 5

Используя javascript, вы получите 4.5 как результат 4500/1000, потому что javascript присваивает только результат как «числовой тип» и возвращает результат непосредственно как float

Удачи !!

...