Necesito imprimir un valor en el archivo de registro. Mi valor es un flotante en el rango 0-1. El valor debe formatearse como 4 dígitos decimales, sin parte entera. Entonces 0.42 se imprimirá como 4200, y con algo de texto antes.

Este es mi enfoque actual:

value = 0.42
print('my value is ' + f'{value:.4f}'[2:])

De alguna manera no se ve muy bien, por lo que la pregunta es: ¿puedo usar el formato flotante de una manera que pueda evitar concatenar dos cadenas, algo así como:

print(f'my value is {value:-1.4f}') # this looks nicer but doesn't do what I want
0
corwin 10 may. 2019 a las 13:55

4 respuestas

La mejor respuesta

Gracias por tus sugerencias. Para resumir todo, lo que no me gustó en mi solución original es que no es claramente visible lo que está haciendo a primera vista. Creo que la versión ligeramente modificada publicada por hiro protagonista es mejor:

print(f'my value is {int(10000*value):04d}')

No es necesario dividir la cadena + Necesito agregar agregar '04d' para imprimir ceros a la izquierda en caso de que el número sea menor.

0
corwin 10 may. 2019 a las 14:00

No hay nada de malo con la satisfacción de str s para obtener argumentos para print, sin embargo, si no se le permite hacerlo, puede usar la siguiente solución:

value = 0.42
print('my value is',f'{value:.4f}'[2:])

Salida:

my value is 4200

Tenga en cuenta que eliminé el último espacio de my values is porque print por defecto agrega espacios entre los argumentos que recibe.

0
Daweo 10 may. 2019 a las 11:26

Esto podría funcionar:

value = 0.42
print('my value is ' + f'{int(10000*value):4d}')
# my value is 4200

Donde convierto su float en un int primero y uso el formato de entero :4d.

O es posible que desee round primero.

3
hiro protagonist 10 may. 2019 a las 11:00

Tu código es bastante bueno, puedes dejarlo como está. También hay otra manera, pero no estoy seguro de que sea agradable.

value = 0.42
print(f'my value is {str(value)[2:]:0<4}')
0
Olvin Roght 10 may. 2019 a las 11:15