¿Hay una manera fácil con Python f-strings para corregir la cantidad de dígitos después del punto decimal? (Específicamente cadenas f, no otras opciones de formato de cadenas como .format o %)
Por ejemplo, digamos que quiero mostrar 2 dígitos después del lugar decimal.
¿Cómo puedo hacer eso? digamos que
a = 10.1234 >>> number1 = 10.1234 >>> f'{number1:.2f}' '10.12' Sintaxis: "{" [field_name] ["!" conversion] [":" format_spec] "}" Explicación: # Let's break it down... # [field_name] => number1 # ["!" conversion] => Not used # [format_spec] => [.precision][type] # => .[2][f] => .2f # where f means Fixed-point notationYendo más allá, las cadenas de formato tienen la siguiente sintaxis. Como puede ver, hay mucho más que se puede hacer.
Syntax: "{" [field_name] ["!" conversion] [":" format_spec] "}" # let's understand what each field means... field_name ::= arg_name ("." attribute_name | "[" element_index "]")* arg_name ::= [identifier | digit+] attribute_name ::= identifier element_index ::= digit+ | index_string index_string ::= <any source character except "]"> + conversion ::= "r" | "s" | "a" format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type] # Looking at the underlying fields under format_spec... fill ::= <any character> align ::= "<" | ">" | "=" | "^" sign ::= "+" | "-" | " " width ::= digit+ grouping_option ::= "_" | "," precision ::= digit+ type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"Consulte https://docs.python.org/3/library/string.html#format-string-syntax
Simplemente
a = 10.1234 print(f"{a:.1f}")Salida: 10.1
a = 10.1234 print(f"{a:.2f}")Salida: 10.12
a = 10.1234 print(f"{a:.3f}")Salida: 10.123
a = 10.1234 print(f"{a:.4f}")Salida: 10.1234
Simplemente cambie el valor después del signo del punto decimal que representa cuántos puntos decimales desea imprimir.
a = 10.1234 print(f"{a:0.2f}")en 0.2f:
Un video detallado sobre f-string para números https://youtu.be/RtKUsUTY6to?t=606
Agregando a la respuesta de Rob, puede usar especificadores de formato con cadenas f ( más aquí ).
pi = 3.141592653589793238462643383279 print(f'The first 6 decimals of pi are {pi:.6f}.') The first 6 decimals of pi are 3.141593. grade = 29/45 print(f'My grade rounded to 3 decimals is {grade:.3%}.') My grade rounded to 3 decimals is 64.444%. from random import randint for i in range(5): print(f'My money is {randint(0, 150):>3}$') My money is 126$ My money is 7$ My money is 136$ My money is 15$ My money is 88$ print(f'I am worth {10000000000:,}$') I am worth 10,000,000,000$Agregando a la respuesta de Robᵩ: en caso de que desee imprimir números bastante grandes, usar separadores de miles puede ser de gran ayuda (tenga en cuenta la coma).
>>> f'{a*1000:,.2f}' '10,123.40'Y en caso de que quiera rellenar/usar un ancho fijo, el ancho va antes de la coma:
>>> f'{a*1000:20,.2f}' ' 10,123.40'Cuando se trata de números float , puede usar especificadores de formato :
f'{value:{width}.{precision}}'donde:
value es cualquier expresión que se evalúa como un númerowidth especifica el número de caracteres usados en total para mostrar, pero si el value necesita más espacio que el ancho especificado, entonces se usa el espacio adicional.precision indica el número de caracteres utilizados después del punto decimalLo que te falta es el especificador de tipo para tu valor decimal. En este enlace , encontrará los tipos de presentación disponibles para punto flotante y decimal.
Aquí tienes algunos ejemplos, utilizando el tipo de presentación f (Punto fijo):
# notice that it adds spaces to reach the number of characters specified by width In [1]: f'{1 + 3 * 1.5:10.3f}' Out[1]: ' 5.500' # notice that it uses more characters than the ones specified in width In [2]: f'{3000 + 3 ** (1 / 2):2.1f}' Out[2]: '3001.7' In [3]: f'{1.2345 + 4 ** (1 / 2):9.6f}' Out[3]: ' 3.234500' # omitting width but providing precision will use the required characters to display the number with the the specified decimal places In [4]: f'{1.2345 + 3 * 2:.3f}' Out[4]: '7.234' # not specifying the format will display the number with as many digits as Python calculates In [5]: f'{1.2345 + 3 * 0.5}' Out[5]: '2.7344999999999997'Incluya el especificador de tipo en su expresión de formato:
>>> a = 10.1234 >>> f'{a:.2f}' '10.12'