truncar redondear potencia poner numeros imprimir entera decimales como python python-3.x floating-point

redondear - Puntos decimales de Flotación de Python 3/Precisión



redondear decimales python (4)

En una palabra, no puedes.

3.65 no se puede representar exactamente como un float . El número que obtiene es el número más cercano a 3.65 que tiene una representación de float exacta.

La diferencia entre (más antiguo?) Python 2 y 3 se debe exclusivamente al formateo predeterminado.

Estoy viendo lo siguiente tanto en Python 2.7.3 como en 3.3.0:

In [1]: 3.65 Out[1]: 3.65 In [2]: ''%.20f'' % 3.65 Out[2]: ''3.64999999999999991118''

Para un tipo de datos decimal exacto, vea decimal.Decimal .

Estoy leyendo un archivo de texto con números de coma flotante, todos con 1 o 2 puntos decimales. Estoy usando float() para convertir una línea en un flotante y generar un ValueError si falla. Estoy almacenando todas las carrozas en una lista. Al imprimirlo, me gustaría imprimirlo como un punto flotante de 2 decimales.

Supongamos que tengo un archivo de texto con los números -3,65, 9,17, 1. Leo cada uno, y una vez que los convierto en flotar y los anexo a una lista. Ahora en Python 2, llamar a float(-3.65) devuelve -3.65 . En Python 3, sin embargo, float(-3.65) returns -3.6499999999999999`, que pierde su precisión.

Quiero imprimir la lista de flotantes, [-3.6499999999999999, 9.1699999999999999, 1.0] con 2 decimales solamente. Hacer algo en la línea de ''%.1f'' % round(n, 1) devolvería una cadena. ¿Cómo puedo devolver una lista de los dos puntos decimales de flotantes y no de cadenas? Hasta ahora, lo redondeé usando [round(num, 2) for num in list] pero necesitaría establecer los puntos decimales / precisión en lugar de round() .


La forma más sencilla de hacerlo es mediante el uso de buit-in redondo.

round(2.6463636263,2) se mostraría como 2.65 .


Intenta comprender a través de esta función a continuación usando python3

def floating_decimals(f_val, dec): prc = "{:."+str(dec)+"f}" #first cast decimal as str print(prc) #str format output is {:.3f} return prc.format(f_val) print(floating_decimals(50.54187236456456564, 3))

La salida es: 50.542

¡Espero que esto te ayude!


Los comentarios indican que el objetivo es imprimir con 2 decimales .

Hay una respuesta simple para Python 3:

>>> num=3.65 >>> "The number is {:.2f}".format(num) ''The number is 3.65''

o equivalentemente con f-strings (Python 3.6+):

>>> num = 3.65 >>> f"The number is {num:.2f}" ''The number is 3.65''

Como siempre, el valor flotante es una aproximación:

>>> "{}".format(f) ''3.65'' >>> "{:.10f}".format(f) ''3.6500000000'' >>> "{:.20f}".format(f) ''3.64999999999999991118''

Creo que la mayoría de los casos de uso querrán trabajar con flotadores y luego solo imprimir con una precisión específica.

Aquellos que quieren que los números se almacenen con exactamente 2 dígitos decimales de precisión, sugiero usar el tipo decimal . Más lectura sobre precisión de punto flotante para aquellos que estén interesados.