¿Cómo puedo utilizar el formato de cadena para mostrar ceros a la izquierda y la precisión de 3?

Estoy tratando de representar un número con ceros a la izquierda de modo que la anchura total es de 7 incluyendo el punto decimal. Por ejemplo, quiero representar a «5» como «005.000». Parece que el formato de cadena me deja hacer lo uno o lo otro, pero no ambos. Aquí está la salida me pongo en Ipython ilustrando mi problema:

In [1]: '%.3f'%5
Out[1]: '5.000'

In [2]: '%03.f'%5
Out[2]: '005'

In [3]: '%03.3f'%5
Out[3]: '5.000'

De la línea 1 y 2 están haciendo exactamente lo que yo esperaría. La línea 3 sólo ignora el hecho de que quiero ceros a la izquierda. Alguna idea? Gracias!

InformationsquelleAutor cat | 2010-08-30

3 Kommentare

  1. 48

    El primer número es el total número de dígitos, incluyendo el punto decimal.

    >>> '%07.3f' % 5
    '005.000'

    Nota importante: Tanto decimal con puntos (.) y signos menos (-) se incluyen en el recuento.

    • Tiene sentido, gracias!
    • Esto también se tiene en cuenta el signo de menos! bleh, inusualmente mala calidad para Python en mi humilde opinión
  2. 7

    [Editar: Gah, golpeado de nuevo]

    '%07.3F'%5

    El primer número es el total de ancho de campo.

  3. 6

    Esto me tomó un segundo para averiguar cómo hacerlo @nosklo del camino, pero con la .format() y ser anidados.

    Ya que no pude encontrar un ejemplo en cualquier otro lugar atm estoy compartiendo aquí.

    Ejemplo de uso de "{}".format(a)

    Python 2

    >>> a = 5
    >>> print "{}".format('%07.3F' % a)
    005.000
    >>> print("{}".format('%07.3F' % a))
    005.000

    Python 3

    Más python3 manera, creado a partir de docs, pero Tanto el trabajo como la intención.

    Prestar atención a la % vs el : y la colocación de el formato es diferente en python3.

    >>> a = 5
    >>> print("{:07.3F}".format(a))
    005.000
    >>> a = 5
    >>> print("Your Number is formatted: {:07.3F}".format(a))
    Your Number is formatted: 005.000

    Ejemplo de uso de "{}".format(a) Anidada

    Luego de expansión que se ajustan a mi código, que fue anidada .format()‘s:

    print("{}: TimeElapsed: {} Seconds, Clicks: {} x {} "
          "= {} clicks.".format(_now(),
                                "{:07.3F}".format((end -
                                                   start).total_seconds()),
                                clicks, _ + 1, ((_ + 1) * clicks),
                                )
          )

    Que los formatos de todo de la manera que yo quería.

    Resultado

    20180912_234006: TimeElapsed: 002.475 Seconds, Clicks: 25 + 50 = 75 clicks.

    Cosas Importantes A Tener En Cuenta:

    • @babbitt: El primer número es el total de ancho de campo.

    • @meawoppl: Esto también se tiene en cuenta el signo de menos!…

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea