Sé cómo controlar el número de decimales, pero ¿cómo puedo controlar el número de ceros específicamente?Impresión de flotantes con un número específico de ceros
Por ejemplo:
104.06250000 -> 104.0625
119.00000 -> 119.0
72.000000 -> 72.0
Sé cómo controlar el número de decimales, pero ¿cómo puedo controlar el número de ceros específicamente?Impresión de flotantes con un número específico de ceros
Por ejemplo:
104.06250000 -> 104.0625
119.00000 -> 119.0
72.000000 -> 72.0
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.
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
¡Gracias! También se me ocurrieron las pruebas if float_variable% 1 == 0, para hacer esto. – zequzd
¿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")
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
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
-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.
–
Creo que la manera más simple sería la función "redonda". en su caso:
>>> round(104.06250000,4)
104.0625
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
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
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). –