Fixed digits after decimal with f-strings

前端 未结 5 911
故里飘歌
故里飘歌 2020-11-28 01:15

Is there an easy way with Python f-strings to fix the number of digits after the decimal point? (Specifically f-strings, not other string formatting options like .format or

相关标签:
5条回答
  • 2020-11-28 01:23

    Include the type specifier in your format expression:

    >>> a = 10.1234
    >>> f'{a:.2f}'
    '10.12'
    
    0 讨论(0)
  • 2020-11-28 01:27

    When it comes to float numbers, you can use format specifiers:

    f'{value:{width}.{precision}}'
    

    where:

    • value is any expression that evaluates to a number
    • width specifies the number of characters used in total to display, but if value needs more space than the width specifies then the additional space is used.
    • precision indicates the number of characters used after the decimal point

    What you are missing is the type specifier for your decimal value. In this link, you an find the available presentation types for floating point and decimal.

    Here you have some examples, using the f (Fixed point) presentation type:

    # 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'
    
    0 讨论(0)
  • 2020-11-28 01:32

    Adding to Robᵩ's answer: in case you want to print rather large numbers, using thousand separators can be a great help (note the comma).

    >>> f'{a*1000:,.2f}'
    '10,123.40'
    
    0 讨论(0)
  • 2020-11-28 01:43

    Adding to Rob's answer, you can use format specifiers with f strings (more here).

    • You can control the number of decimals:
    pi = 3.141592653589793238462643383279
    
    print(f'The first 6 decimals of pi are {pi:.6f}.')
    
    The first 6 decimals of pi are 3.141593.
    
    • You can convert to percentage:
    grade = 29/45
    
    print(f'My grade rounded to 3 decimals is {grade:.3%}.')
    
    My grade rounded to 3 decimals is 64.444%.
    
    • You can do other things like print constant length:
    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$
    
    • Or even print with a comma thousand separator:
    print(f'I am worth {10000000000:,}$')
    
    I am worth 10,000,000,000$
    
    0 讨论(0)
  • 2020-11-28 01:46
    a = 10.1234
    
    print(f"{a:0.2f}")
    

    in 0.2f:

    • 0 is telling python to put no limit on the total number of digits to display
    • .2 is saying that we want to take only 2 digits after decimal (the result will be same as a round() function)
    • f is telling that it's a float number. If you forget f then it will just print 1 less digit after the decimal. In this case, it will be only 1 digit after the decimal.

    A detailed video on f-string for numbers https://youtu.be/RtKUsUTY6to?t=606

    0 讨论(0)
提交回复
热议问题