I have a function taking float arguments (generally integers or decimals with one significant digit), and I need to output the values in a string with two decimal places (5 → 5.00, 5.5 → 5.50, etc). How can I do this in Python?
You could use the string formatting operator for that:
>>> '%.2f' % 1.234
'1.23'
>>> '%.2f' % 5.0
'5.00'
The result of the operator is a string, so you can store it in a variable, print etc.
float
, you'd skip the intermediate string and just do round(myfloat, 2)
; float('%.2f' % 5.0)
it completely pointless (the string adds a zero, then parsing back to float
discards it (because float
has no concept of additional trailing zeroes). –
Phail Since this post might be here for a while, lets also point out python 3 syntax:
"{:.2f}".format(5)
d=3
, then the syntax is "{:.{}f}".format(5, d)
–
Suggestive You could use the string formatting operator for that:
>>> '%.2f' % 1.234
'1.23'
>>> '%.2f' % 5.0
'5.00'
The result of the operator is a string, so you can store it in a variable, print etc.
float('%.2f' % 5.0)
? –
Defeatist float
, you'd skip the intermediate string and just do round(myfloat, 2)
; float('%.2f' % 5.0)
it completely pointless (the string adds a zero, then parsing back to float
discards it (because float
has no concept of additional trailing zeroes). –
Phail f-string formatting:
This was new in Python 3.6 - the string is placed in quotation marks as usual, prepended with f'...
in the same way you would r'...
for a raw string. Then you place whatever you want to put within your string, variables, numbers, inside braces f'some string text with a {variable} or {number} within that text'
- and Python evaluates as with previous string formatting methods, except that this method is much more readable.
>>> foobar = 3.141592
>>> print(f'My number is {foobar:.2f} - look at the nice rounding!')
My number is 3.14 - look at the nice rounding!
You can see in this example we format with decimal places in similar fashion to previous string formatting methods.
NB foobar
can be an number, variable, or even an expression eg f'{3*my_func(3.14):02f}'
.
Going forward, with new code I prefer f-strings over common %s or str.format() methods as f-strings can be far more readable, and are often much faster.
d=3
, then the syntax is f'My number is {foobar:.{d}f}'
- as commented by @Suggestive –
Petticoat f'My number is {foobar:.{d}{format}}'
too where format
could be e
, f
, g
, or n
. –
Eck String Formatting:
a = 6.789809823
print('%.2f' %a)
OR
print ("{0:.2f}".format(a))
Round Function can be used:
print(round(a, 2))
Good thing about round() is that, we can store this result to another variable, and then use it for other purposes.
b = round(a, 2)
print(b)
Use round() - mostly for display purpose.
round
. It should not be used just for display purposes. –
Whoops round(5.0001, 2)
-> 5.0
, not '5.00'
–
Gyp String formatting:
print "%.2f" % 5
math.floor
, math.ceil
or round
–
Nomanomad If you actually want to change the number itself instead of only displaying it differently use format()
Format it to 2 decimal places:
format(value, '.2f')
example:
>>> format(5.00000, '.2f')
'5.00'
Using python string formatting.
>>> "%0.2f" % 3
'3.00'
In Python 3
print(f"{number:.2f}")
A shorter way to do format.
Shortest Python 3 syntax:
n = 5
print(f'{n:.2f}')
I know it is an old question, but I was struggling finding the answer myself. Here is what I have come up with:
Python 3:
>>> num_dict = {'num': 0.123, 'num2': 0.127}
>>> "{0[num]:.2f}_{0[num2]:.2f}".format(num_dict)
0.12_0.13
I faced this problem after some accumulations. So What I learnt was to multiply the number u want and in the end divide it to the same number. so it would be something like this: (100(x+y))/100 = x+y if ur numbers are like 0.01, 20.1, 3,05. You can use number * (len(number)-1)**10 if your numbers are in unknown variety.
decimal
module (which can be set to arbitrary levels of base-10 precision). –
Phail Using Python 3 syntax:
print('%.2f' % number)
If you want to get a floating point value with two decimal places limited at the time of calling input,
Check this out ~
a = eval(format(float(input()), '.2f')) # if u feed 3.1415 for 'a'.
print(a) # output 3.14 will be printed.
eval
a string when you could just round
? Anyway this doesn't even work properly since if you feed in 5
, you get 5.0
instead of 5.00
like OP wants. –
Gyp © 2022 - 2024 — McMap. All rights reserved.
float('%.2f' % 5.0)
? – Defeatist