print examples python floating-point string.format

print - format python examples



Python string.format() porcentaje a un lugar decimal (4)

En el siguiente ejemplo, me gustaría formatear con 1 decimal, pero parece que a Python le gusta redondear el número, ¿hay alguna forma de que no redondee el número?

>>> ''{:.1%}''.format(0.9995) ''100.0%'' >>> ''{:.2%}''.format(0.9995) ''99.95%''

¡Gracias! :)


Algo como esto:

def my_format(num, x): return str(num*100)[:4 + (x-1)] + ''%'' >>> my_format(.9995, 1) ''99.9%'' >>> my_format(.9995, 2) ''99.95%'' >>> my_format(.9999, 1) ''99.9%'' >>> my_format(0.99987, 2) ''99.98%''


Con Python 3.6+, puedes usar literales de cadena con formato, también conocidos como cadenas de caracteres. Estos son más eficientes que str.format . Además, puede usar una división de pisos más eficiente en lugar de math.floor . En mi opinión, la sintaxis también es más legible.

Ambos métodos se incluyen a continuación para su comparación.

from math import floor from random import random def floored_percentage(val, digits): val *= 10 ** (digits + 2) return ''{1:.{0}f}%''.format(digits, floor(val) / 10 ** digits) def floored_percentage_jpp(val, digits): val *= 10 ** (digits + 2) return f''{val // digits / 10 ** digits:.{digits}f}%'' values = [random() for _ in range(10000)] %timeit [floored_percentage(x, 1) for x in values] # 35.7 ms per loop %timeit [floored_percentage_jpp(x, 1) for x in values] # 28.1 ms per loop


Hay un par de maneras, tal vez la más fácil es

x = str(10. * 0.9995).split(''.'') my_string = ''%s.%s%%'' % (x[0], x[1][:2])

Esto asegurará que siempre tenga el punto decimal en el lugar correcto (para casos de borde como 1.0000 o 0.001 )


Si desea redondear hacia abajo siempre (en lugar de redondear a la precisión más cercana), hágalo explícitamente con la función math.floor()

from math import floor def floored_percentage(val, digits): val *= 10 ** (digits + 2) return ''{1:.{0}f}%''.format(digits, floor(val) / 10 ** digits) print floored_percentage(0.995, 1)

Manifestación:

>>> from math import floor >>> def floored_percentage(val, digits): ... val *= 10 ** (digits + 2) ... return ''{1:.{0}f}%''.format(digits, floor(val) / 10 ** digits) ... >>> floored_percentage(0.995, 1) ''99.5%'' >>> floored_percentage(0.995, 2) ''99.50%'' >>> floored_percentage(0.99987, 2) ''99.98%''