How do I format a floating number to a fixed width with the following requirements:
Leading zero if n < 1 Add trailing decimal zero(s) to fill up fixed width Truncate decimal digits past fixed width Align all decimal points
For example:
% formatter something like '{:06}'
numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]
for number in numbers:
print formatter.format(number)
The output would be like
23.2300
0.1233
1.0000
4.2230
9887.2000
numbers = [23.23, 0.1233, 1.0, 4.223, 9887.2]
for x in numbers:
print("{:10.4f}".format(x))
prints
23.2300
0.1233
1.0000
4.2230
9887.2000
The format specifier inside the curly braces follows the Python format string syntax. Specifically, in this case, it consists of the following parts:
The empty string before the colon means "take the next provided argument to format()" – in this case the x as the only argument.
The 10.4f part after the colon is the format specification.
The f denotes fixed-point notation.
The 10 is the total width of the field being printed, lefted-padded by spaces.
The 4 is the number of digits after the decimal point.
It has been a few years since this was answered, but as of Python 3.6 (PEP498) you could use the new f-strings
:
numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]
for number in numbers:
print(f'{number:9.4f}')
Prints:
23.2300
0.1233
1.0000
4.2230
9887.2000
In python3 the following works:
>>> v=10.4
>>> print('% 6.2f' % v)
10.40
>>> print('% 12.1f' % v)
10.4
>>> print('%012.1f' % v)
0000000010.4
%
formatting is the oldest method of formatting. For several reasons using str.format
or f-strings
is preferred over %
. Previously when it was only str.format
, people had some reasons but f-strings
fixed that hole. format mini-language docs, str.format examples from docs and f-string literals examples in docs
See Python 3.x format string syntax:
IDLE 3.5.1
numbers = ['23.23', '.1233', '1', '4.223', '9887.2']
for x in numbers:
print('{0: >#016.4f}'. format(float(x)))
23.2300
0.1233
1.0000
4.2230
9887.2000
You can also left pad with zeros. For example if you want number
to have 9 characters length, left padded with zeros use:
print('{:09.3f}'.format(number))
Thus, if number = 4.656
, the output is: 00004.656
For your example the output will look like this:
numbers = [23.2300, 0.1233, 1.0000, 4.2230, 9887.2000]
for x in numbers:
print('{:010.4f}'.format(x))
prints:
00023.2300
00000.1233
00001.0000
00004.2230
09887.2000
One example where this may be useful is when you want to properly list filenames in alphabetical order. I noticed in some linux systems, the number is: 1,10,11,..2,20,21,...
Thus if you want to enforce the necessary numeric order in filenames, you need to left pad with the appropriate number of zeros.
This will print 76.66
:
print("Number: ", f"{76.663254: .2f}")
In Python 3.
GPA = 2.5
print(" %6.1f " % GPA)
6.1f
means after the dots 1 digits show if you print 2 digits after the dots you should only %6.2f
such that %6.3f
3 digits print after the point.
Using f-string literals:
>>> number = 12.34
>>> print(f"{number}")
12.34
>>> print(f"{number:10f}")
12.340000
>>> print(f"{number:10.4f}")
12.3400
The 10.4f
after the colon :
is the format specification, with 10 being the width in characters of the whole number (including spaces), and the second number 4 being the number of decimal places, and the f
standing for floating-point number.
It's also possible to use variables instead of hard-coding the width and the number of decimal places:
>>> number = 12.34
>>> width = 10
>>> decimals = 4
>>> print(f"{number:{width}.{decimals}f}")
12.3400
I needed something similar for arrays. That helped me
some_array_rounded=np.around(some_array, 5)
I tried all the options like
pd.options.display.float_format = '{:.4f}'.format pd.set_option('display.float_format', str) pd.set_option('display.float_format', lambda x: f'%.{len(str(x%1))-2}f' % x) pd.set_option('display.float_format', lambda x: '%.3f' % x)
but nothing worked for me.
so while assigning the variable/value (var1
) to a variable (say num1
) I used round(val,5)
like
num1 = round(var1,5)
This is a crude method as you have to use this round function in each assignment. But this ensures you control on how it happens and get what you want.
Success story sharing
10.4
means a width of 10 characters and a precision of 4 decimal places.10
is the minimum field width, i.e. the minimum length of the printed string. Numbers are by default right-aligned and padded with spaces -- see the documentation for more details.("%0.4f" % x).rjust(10)
"%10.4f" % x
. In Python 2.6, you can also use"{0:10.4f}".format(x)
.