2012-02-22 13 views
27

Znalazłem dwa sposoby podejmowania podłogi w Pythonie:Biorąc podłodze pływaka

3.1415 // 1 

i

import math 
math.floor(3.1415) 

Problem z pierwszego podejścia jest to, że powrót pływaka (mianowicie 3.0). Drugie podejście wydaje się niezdarne i zbyt długie.

Czy istnieją alternatywne rozwiązania do wykonywania podłóg w języku Python?

+8

wybierz drugą. nic w tym złego. –

+4

Zawsze można nazwać 'int (3.1415)', ale zamiast podłogi, zaokrągla się w kierunku 0, co da inny wynik dla liczb <0. –

+0

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

Odpowiedz

42

Dopóki numery są pozytywne, można po prostu przekonwertować do int zaokrąglić w dół do najbliższej liczby całkowitej:

>>> int(3.1415) 
3 

Dla liczb całkowitych ujemnych to jednak zaokrąglić w górę.

+0

Aby zaokrąglić w dół dowolną liczbę (dodatnią i ujemną), nadal występuje 'int (n // 1)', np. 'Int (-3.14 // 1)', która daje '-4'. Oczywiście jest to przydatne tylko wtedy, gdy mogą pojawić się liczby ujemne. – zezollo

+0

@zezollo Jeśli nie chcesz mylić czytelników swojego kodu, użycie 'int (math.floor (x)) jest lepsze niż dzielenie pięter o 1, ponieważ od razu widać, co robi. –

6

Drugie podejście to droga, ale istnieje sposób, aby to skrócić.

from math import floor 
floor(3.1415) 
+2

'floor()' zwraca liczbę całkowitą w python3, ale w python2 zwraca wartość float. –

+0

@eugeney, właśnie wskazywałem, że istnieje sposób na odejście od części "matematyki". Zastanawiam się, dlaczego nie narzekają na uzyskanie "float" z "podłogi" w pierwszej kolejności? I dziękuję za poinformowanie mnie o tej zmianie od 2 do 3, nie znałem tego. Ma to sens, 'floor' nie może zwrócić' int', dopóki dowolna liczba całkowita nie będzie zamienna z normalnymi intami zaczynającymi się od 2.4. –

1

miotać int jeśli nie chcesz float

int(3.1415 // 1) 
10

Można zadzwonić int() na pływaka do oddania do dolnej int (oczywiście nie na podłogę, ale bardziej eleganckie)

int(3.745) #3 

Można także zadzwonić int na wynik podłogi.

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

Dlaczego ludzie oczekiwaliby '4' dla' int (f2) '? – Randomblue

+1

Ponieważ możesz oczekiwać, że zaokrągli do najbliższej int, nie do niższej int. –

+2

OP używa Pythona 3.x, co nie jest całkiem oczywiste ze stanowiska. W języku Python 3.x funkcja 'math.floor()' zwraca 'int', więc nie jest konieczna konwersja wartości zwracanej. –

3

Uważaj, zabierania głosu i odlewania do int nie to samo z liczb ujemnych. Jeśli naprawdę chcesz mieć podłogę jako liczbę całkowitą, powinieneś rzucić na int po wywołaniu math.floor().

>>> int(-0.5) 
0 
>>> math.floor(-0.5) 
-1.0 
>>> int(math.floor(-0.5)) 
-1 
Powiązane problemy