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 10 Answers
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.
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 1In 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 1See 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.
I needed something similar for arrays. That helped me
some_array_rounded=np.around(some_array, 5) 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 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.