2012-02-22 9 views
27

he encontrado dos formas de tomar pisos en Python:Al tomar la palabra de un flotador

3.1415 // 1 

y

import math 
math.floor(3.1415) 

El problema con el primer enfoque es que se devuelva un flotador (es decir, 3.0) El segundo enfoque se siente torpe y demasiado largo.

¿Hay soluciones alternativas para tomar pisos en Python?

+8

elige el segundo. nada malo con eso. –

+4

Siempre puede llamar a 'int (3.1415)', pero en lugar de un piso, se redondea hacia 0, lo que arrojará un resultado diferente para los números <0. –

+0

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

Respuesta

42

Siempre y cuando sus números son positivos, sólo tiene que convertir en un int para redondear hacia abajo al siguiente número entero:

>>> int(3.1415) 
3 

Para enteros negativos, esto redondeará, sin embargo.

+0

Para obtener cualquier número (positivo o negativo) para redondear, todavía hay 'int (n // 1)', como 'int (-3.14 // 1)' que da '-4'. Por supuesto, esto solo es útil si pueden aparecer números negativos. – zezollo

+0

@zezollo A menos que quiera confundir a los lectores de su código, es preferible usar 'int (math.floor (x))' sobre la división del piso en 1, ya que es obvio de inmediato lo que hace. –

6

El segundo enfoque es el camino a seguir, pero hay una manera de acortarlo.

from math import floor 
floor(3.1415) 
+2

'floor()' devuelve un número entero en python3, pero en python2 devuelve float. –

+0

@eugeney, solo estaba señalando que había una manera de dejar la parte 'matemática'. Me pregunto por qué no se quejaron de obtener un resultado de "flotación" de 'piso' en primer lugar. Y gracias por informarme de ese cambio de 2 a 3, no lo sabía. Tiene sentido, 'floor' no puede devolver un' int' hasta que los enteros de tamaño arbitrario sean intercambiables con los enteros normales que comienzan en 2.4. –

1

moldeada a int si usted no quiere un float

int(3.1415 // 1) 
10

Puede llamar int() en el flotador para echar a la int inferior (no, obviamente, el piso, pero más elegante)

int(3.745) #3 

llaman Alternativamente int en el resultado de piso.

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

¿Por qué la gente esperaría '4' para' int (f2) '? – Randomblue

+1

Porque puede esperar que redondee al int más cercano, no al int inferior. –

+2

El OP usa Python 3.x, lo cual no es del todo obvio desde la publicación. En Python 3.x, 'math.floor()' devuelve un 'int', por lo que no es necesario convertir el valor de retorno. –

3

Tenga en cuenta que tomar la palabra y echando a un int no son la misma cosa con números negativos. Si realmente desea el piso como un entero, debe convertirlo a int después de llamar a math.floor().

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