2012-05-25 5 views
1

Есть ли стандартная функция библиотеки, которая будет устанавливать минимальное значение для операции деления, например:Как установить минимальное значение для операции деления в python?

min(1, a/b) 

Это обеспечит мин стоимость эксплуатации выше всегда будет 1, никогда 0.

Такие, как:

min(1, 1/5) 
1 

Кроме того, как я округлить подразделение:

round_up(1/5) = 1 

Я всегда получаю «0», когда я делю 1/5, даже с функцией CEIL:

math.ceil(1/5) 
0 

ответ

3

Если вы хотите использовать точку деления с плавающей по умолчанию, вы можете сделать from __future__ import division:

>>> 1/5 
0 
>>> from __future__ import division 
>>> 1/5 
0.2 
>>> math.ceil(1/5) 
1.0 

Если вам нужен результат быть целого типа, например, для индексации, вы можете использовать

int(math.ceil(1/5)) 
2

Результат 1/5 является целым числом уже. Если вам нужна версия с плавающей запятой, вам нужно сделать 1.0/5. Функция math.ceil будет работать так, как вы ожидаете: math.ceil(1.0/5) = 1.0.

Если вы работаете с переменными вместо констант, используйте функцию float(x) для преобразования целого числа в плавающую точку.

2
In [4]: 1/5 
Out[4]: 0 

In [5]: math.ceil(1/5) 
Out[5]: 0.0 

In [7]: float(1)/5 
Out[7]: 0.2 

In [8]: math.ceil(float(1)/5) 
Out[8]: 1.0 
0

Вы могли бы сделать круглую вверх функцию для целых чисел, как этого

>>> def round_up(p, q): 
...  d, r = divmod(p, q) 
...  if r != 0: 
...   d += 1 
...  return d 
... 
>>> round_up(1, 5) 
1 
>>> round_up(0, 5) 
0 
>>> round_up(5, 5) 
1 
>>> round_up(6, 5) 
2 
>>> 

Вашего пример не работает, потому что целое число деления целого числа является целым числом.

Что касается вашего вопроса min - то, что вы написали, возможно, это лучшее, что вы можете сделать.

0

Я не знаю, о чем в стандартной библиотеке, но если вы просто пытаетесь, чтобы убедиться, что ответ не может быть меньше 1, функция довольно легко:

def min_dev(x,y): 
    ans = x/y 
    if ans < 1:  # ensures answer cannot be 0 
     return 1 
    else:   # answers greater than 1 are returned normally 
     return ans 

Если, вместо этого, вы хотите, чтобы округлить каждый ответ:

def round_up(x,y): 
    ans = x//y   # // is the floor division operator 
    if x % y == 1:  # tests for remainder (returns 0 for no, 1 for yes) 
     ans += 1  # same as ans = ans + 1 
     return ans 
    else: 
     return ans 

Это будет окружать любой ответ с остатком. Я считаю, что Python 3.3 (и я знаю 3.4) возвращает поплавок по умолчанию для целочисленного деления: https://docs.python.org/3/tutorial/introduction.html

 Смежные вопросы

  • Нет связанных вопросов^_^