Tengo un número de coma flotante, por ejemplo 135.12345678910
. Quiero concatenar ese valor a una cadena, pero solo quiero 135.123456789
. Con print, puedo hacer esto fácilmente haciendo algo como:
print "%.9f" % numvar
con numvar
ser mi número original ¿Hay una forma fácil de hacer esto?
python
string
floating-point
pauliwago
fuente
fuente
Respuestas:
Con Python <3 (por ejemplo, 2.6 [ver comentarios] o 2.7), hay dos formas de hacerlo.
Pero tenga en cuenta que para las versiones de Python anteriores a 3 (por ejemplo, 3.2 o 3.3), se prefiere la opción dos .
Para obtener más información sobre la opción dos, sugiero este enlace sobre el formato de cadenas de la documentación de Python .
Y para obtener más información sobre la opción uno, este enlace será suficiente y tiene información sobre las diferentes banderas .
Python 3.6 (lanzado oficialmente en diciembre de 2016), agregó el
f
literal de cadena, vea más información aquí , que amplía elstr.format
método (uso de llaves paraf"{numvar:.9f}"
resolver el problema original), es decir,resuelve el problema Consulte la respuesta de @ Or-Duan para obtener más información, pero este método es rápido .
fuente
newer_method_string = "{:.9f}".format(numvar)
: tenga en cuenta lo necesario:
para separar el campo y el formato. He probado esto en 2.7.5 de todos modos.newer_method_string = "{0:.9f}".format(numvar)
: tenga en cuenta el 0 requerido para field_name para esta versión anterior.Python 3.6
Solo para que quede claro, puedes usar f-string formato . Esto tiene casi la misma sintaxis que el
format
método, pero lo hace un poco más agradable.Ejemplo:
Más información sobre la nueva cadena f:
Aquí hay un diagrama de los tiempos de ejecución de los diversos métodos probados (del último enlace anterior):
fuente
Utilizando
round
:fuente
No es la impresión la que formatea, es una propiedad de cadenas, por lo que puede usar
fuente
En caso de que la precisión no se conozca hasta el tiempo de ejecución, esta otra opción de formato es útil:
fuente
.format
-method, nota que esto también se puede hacer mediante argumentos de anidación de esta manera:'{:.{n}f}'.format(numvar,n=n)
.Para establecer la precisión con 9 dígitos, obtenga:
Precisión de retorno con 2 dígitos:
Precisión de retorno con 2 dígitos y valor convertido flotante:
fuente
La
str
función tiene un error. Por favor intenta lo siguiente. Verá '0,196553' pero la salida correcta es '0,196554'. Porque elstr
valor predeterminado de la función es ROUND_HALF_UP.fuente
.
frente,
? ¿Y cómo es relevante para la pregunta de pauliwago?