2012-02-22 2 views
27

я нашел два способа принятия этажа в Python:Взяв слово поплавка

3.1415 // 1 

и

import math 
math.floor(3.1415) 

Проблема с первым подходом заключается в том, что она возвращает поплавок (а именно 3.0). Второй подход кажется неуклюжим и слишком длинным.

Существуют ли альтернативные решения для принятия полов в Python?

+8

выбрать второй вариант. ничего плохого в этом. –

+4

Вы всегда можете называть 'int (3.1415)', но вместо пола он округляется до 0, что даст результат для чисел <0. –

+0

http://uncyclopedia.wikia.com/wiki/Pi_equals_exactly_three – wim

ответ

42

Пока ваши числа положительны, то вы можете просто преобразовать в int округлить до следующего целого числа:

>>> int(3.1415) 
3 

Для отрицательных целых чисел это будет округлено.

+0

Чтобы получить любое число (как положительное, так и отрицательное) для округления, есть еще 'int (n // 1)', как 'int (-3.14 // 1)', который дает '-4'. Конечно, это полезно, только если могут появиться отрицательные числа. – zezollo

+0

@zezollo Если вы не хотите путать читателей с вашим кодом, использование 'int (math.floor (x)) предпочтительнее, чем разделение полов на 1, так как сразу видно, что он делает. –

6

Второй подход - это путь, но есть способ сократить его.

from math import floor 
floor(3.1415) 
+2

'floor()' возвращает целое число в python3, но в python2 он возвращает float. –

+0

@eugeney, я просто указывал, что есть способ оставить часть «математика». Интересно, почему они не жаловались на получение результата «float» с «пола» в первую очередь? И спасибо, что сообщили мне об этом изменении от 2 до 3, я не знал этого. Имеет смысл, 'floor' не может вернуть' int', пока целые числа произвольного размера не будут взаимозаменяемы с обычными ints, начиная с 2.4. –

1

В ролях его int, если вы не хотите float

int(3.1415 // 1) 
10

Вы можете назвать Int() на поплавок приведение к нижнему междунар (не очевидно пол, но более элегантный)

int(3.745) #3 

В качестве альтернативы называют Int на результат пола.

from math import floor 

f1 = 3.1415 
f2 = 3.7415 

print floor(f1)  # 3.0 
print int(floor(f1)) # 3 
print int(f1)   # 3 
print int(f2)   # 3 (some people may expect 4 here) 
print int(floor(f2)) # 3 

http://docs.python.org/library/functions.html#int

+1

Почему люди ожидали '4' для' int (f2) '? – Randomblue

+1

Потому что вы можете ожидать, что он округляется до ближайшего int, а не нижнего int. –

+2

OP использует Python 3.x, что не совсем очевидно из сообщения. В Python 3.x 'math.floor()' возвращает 'int', поэтому нет необходимости преобразовывать возвращаемое значение. –

3

берегись, взяв слово и литье на междунар не то же самое с отрицательными числами. Если вы действительно хотите, чтобы пол был целым числом, вы должны указать на int после вызова math.floor().

>>> int(-0.5) 
0 
>>> math.floor(-0.5) 
-1.0 
>>> int(math.floor(-0.5)) 
-1 

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

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