254

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?

0

13 Answers 13

398

Since this post might be here for a while, lets also point out python 3 syntax:

"{:.2f}".format(5)
Sign up to request clarification or add additional context in comments.

1 Comment

Just for completeness, if the decimals is variable, e.g. d=3, then the syntax is "{:.{}f}".format(5, d)
206

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.

3 Comments

Would it be good idea to convert it into float again like: float('%.2f' % 5.0)?
@alper that would depend entirely on what you need it for...to print text, a string is fine.
@alper: If the end goal was a 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).
171

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.

2 Comments

If the decimals is variable, e.g. d=3, then the syntax is f'My number is {foobar:.{d}f}' - as commented by @jurajb
You're right. I'd never considered that. It could be f'My number is {foobar:.{d}{format}}' too where format could be e, f, g, or n.
27

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.

3 Comments

Downvote for round. It should not be used just for display purposes.
@wim I respect your comment, but this answers are just to satisfy someone's requirement.
@debaonline4u wim is right. round(5.0001, 2) -> 5.0, not '5.00'
12

String formatting:

print "%.2f" % 5

2 Comments

But all this are strings , so iam not able to do any mathematical operations on them
@itsaruns Adding empty decimal places makes no difference if you just need to perform mathematical operations on them. You may be looking for math.floor, math.ceil or round
11

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'

Comments

9

In Python 3

print(f"{number:.2f}")

A shorter way to do format.

1 Comment

Already covered by this answer from four years earlier.
8

Using python string formatting.

>>> "%0.2f" % 3
'3.00'

Comments

5

Shortest Python 3 syntax:

n = 5
print(f'{n:.2f}')

1 Comment

Already covered by this answer from 2 years earlier
-1

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

1 Comment

Hi, welcome to Stack Overflow. When answering a question that already has many answers, please be sure to add some additional insight into why the response you're providing is substantive and not simply echoing what's already been vetted by the original poster. This is especially important in "code-only" answers such as the one you've provided.
-2

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.

2 Comments

While giving examples you can format your text to look like actuall code. Check the options in the editor
What you're doing with manual fixed point adjustments is better handled by the decimal module (which can be set to arbitrary levels of base-10 precision).
-4

Using Python 3 syntax:

print('%.2f' % number)

1 Comment

%-formatting is not new to Python 3, and is already covered by this answer from 6 years earlier
-4

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.

1 Comment

Why 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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.