print - round float python 3
Formatee el float de Python truncado como int en una cadena (3)
Es posible ampliar el lenguaje de formato de cadena estándar extendiendo la cadena de clase.
class MyFormatter(Formatter):
def format_field(self, value, format_spec):
if format_spec == ''t'': # Truncate and render as int
return str(int(value))
return super(MyFormatter, self).format_field(value, format_spec)
MyFormatter().format("{0} {1:t}", "Hello", 4.567) # returns "Hello 4"
Un rápido obvio:
some_float = 1234.5678
print ''%02d'' % some_float # 1234
some_float = 1234.5678
print ''{WHAT?}''.format(some_float) # I want 1234 here too
Nota: {:.0f}
no es una opción, porque redondea (devuelve 1235
en este ejemplo).
format(..., int(some_float))
es exactamente lo que intento evitar, por favor no sugiera eso.
Esto funciona:
from math import trunc
some_float = 1234.5678
print ''{:d}''.format(trunc(some_float))
=> 1234
O simplemente haz esto, para el caso:
print trunc(some_float)
=> 1234
Creo que es una respuesta aceptable, evita la conversión a int
. Tenga en cuenta que en este fragmento de ''%02d'' % some_float
: ''%02d'' % some_float
está ocurriendo una conversión implícita a int
, no puede evitar algún tipo de conversión para imprimir en el formato deseado.
Esto también funcionará:
some_float = 1234.5678
f = lambda x: str(x)[:str(x).find(''.'')]
print ''{}''.format(f(some_float))
=> 1234
Después de hacer una prueba de% timeit, parece que la función trunc de la biblioteca matemática es más rápida, por math.trunc
que sería preferible math.trunc
si necesita formatear muchos números de esta manera.