'How to format a floating number to fixed width in Python
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
Solution 1:[1]
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
Solution 2:[2]
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
Solution 3:[3]
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
Solution 4:[4]
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.
Solution 5:[5]
This will print 76.66:
print("Number: ", f"{76.663254: .2f}")
Solution 6:[6]
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.
Solution 7:[7]
I needed something similar for arrays. That helped me
some_array_rounded=np.around(some_array, 5)
Solution 8:[8]
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, 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
Solution 9:[9]
I tried all the options like
pd.options.display.float_format = '{:.4f}'.formatpd.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.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
