2009-06-11 18 views

Respuesta

5

No creo que hay una formato predefinido para esto - el formato en python se hereda de C, y estoy bastante seguro de que no tiene el formato deseado en C.

Ahora, en python 3, tiene el formato función especial, donde puede hacer su propio formateo. La eliminación de los últimos ceros en Python es muy fácil: sólo tiene que utilizar el método de la tira:

a = 1.23040000 
print str(a).rstrip('0') 

Si desea mantener un 0 después del punto decimal, eso no es muy difícil tampoco.

+0

Ok, ¡genial! Ahora solo tengo que ocuparme de la situación 1.000000 -> 1.0 por separado, cualquier forma de hacerlo, es decir, verificar si solo hay ceros después de "." – zequzd

+4

Me gustaría ir por la respuesta directa: detectar si el último carácter es un punto, y agregar un 0 si ese es el caso. Tenga en cuenta que esto no funcionará en la localización (por ejemplo, en mi idioma nativo, francés, usamos ',' para el punto decimal y '.' Para el separador de miles). –

1

El operador '%2.2f' sólo lo hará el mismo número de decimales independientemente del número de dígitos significativos del número de cuenta. Deberá identificar esto en el número y frig manualmente el formato. Es posible que pueda acortar esto imprimiendo en una cadena con una gran cantidad de decimales y quitar todos los ceros al final.

Una función trivial para hacer esto podría ser algo como intel_format() en el ejemplo siguiente:

import re 

foo_string = '%.10f' % (1.33333) 
bar_string = '%.10f' % (1) 

print 'Raw Output' 
print foo_string 
print bar_string 

print 'Strip trailing zeros' 
print re.split ('0+$', foo_string)[0] 
print re.split ('0+$', bar_string)[0] 

print 'Intelligently strip trailing zeros' 
def intel_format (nn): 
    formatted = '%.10f' % (nn) 
    stripped = re.split('0+$', formatted) 
    if stripped[0][-1] == '.': 
     return stripped[0] + '0' 
    else: 
     return stripped[0] 

print intel_format (1.3333) 
print intel_format (1.0) 

Cuando se ejecuta, se obtiene este resultado:

Raw Output 
1.3333300000 
1.0000000000 
Strip trailing zeros 
1.33333 
1. 
Intelligently strip trailing zeros 
1.3333 
1.0 
+0

¡Gracias! También se me ocurrieron las pruebas if float_variable% 1 == 0, para hacer esto. – zequzd

9

¿Qué le parece usar el módulo decimal?

Desde el documentation:...

"El módulo decimal incorpora una noción de lugares significativos para que 1.30 + 1.20 2.50 se guarda el cero final para indicar la significación Esta es la presentación habitual para aplicaciones monetarias Para la multiplicación , el enfoque de “libro de texto” utiliza todas las figuras en los multiplicandos Por ejemplo, 1,3 * 1,2 da 1,56 mientras que 1,30 * 1,20 da 1,5600 "

la función normalize() elimina ceros a la derecha:..

>>> from decimal import * 
>>> d1 = Decimal("1.30") 
>>> d2 = Decimal("1.20") 
>>> d3 
Decimal("1.5600") 
>>> d3.normalize() 
Decimal("1.56") 
+0

Sí, esto también podría.Sin embargo, el programa que tuve que escribir era de naturaleza científica o no tenía nada que ver con la significación, era un ejercicio bastante trivial, pero ahora funciona. ¡Gracias! – zequzd

-2
def float_remove_zeros(input_val): 
    """ 
    Remove the last zeros after the decimal point: 
    * 34.020 -> 34.02 
    * 34.000 -> 34 
    * 0 -> 0 
    * 0.0 -> 0 
    """ 
    stripped = input_val 
    if input_val != 0: 
     stripped = str(input_val).rstrip('0').rstrip('.') 
    else: 
     stripped = 0 
    return stripped 
+0

-1: De la pregunta: cuando el flotador es 104.06250000 el programa debería imprimir 104.0625 ... 119.00000 o 72.000000 ... debería ... [ser] 119.0 y 72.0.

4

Creo que la manera más simple sería la función "redonda". en su caso:

>>> round(104.06250000,4) 
104.0625 
0

Puede utilizar el formato del método de cadena si está utilizando Python 2.6 y superior.

>>> print "{0}".format(1.0) 
1.0 
>>> print "{0}".format(1.01) 
1.01 
>>> print "{0}".format(float(1)) 
1.0 
>>> print "{0}".format(1.010000) 
1.01 
Cuestiones relacionadas