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
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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 thexas the only argument. - The
10.4fpart after the colon is the format specification. - The
fdenotes fixed-point notation. - The
10is the total width of the field being printed, lefted-padded by spaces. - The
4is the number of digits after the decimal point.
Method 2
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
Method 3
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
Method 4
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
Method 5
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.
Method 6
This will print 76.66:
print("Number: ", f"{76.663254: .2f}")
Method 7
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.
Method 8
I needed something similar for arrays. That helped me
some_array_rounded=np.around(some_array, 5)
Method 9
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
Method 10
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.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0