Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set variable precision for new python format option

I am loving the new format option for strings containing variables, but I would like to have a variable that sets the precision through out my script and I am not sure how to do that. Let me give a small example:

a = 1.23456789
out_str = 'a = {0:.3f}'.format(a)
print(out_str)

Now this is what I would want to do in pseudo code:

a = 1.23456789
some_precision = 5
out_str = 'a = {0:.(some_precision)f}'.format(a)
print(out_str)

but I am not sure, if it is possibly and if it is possibly how the syntax would look like.

like image 376
Asking Questions Avatar asked Aug 27 '26 20:08

Asking Questions


1 Answers

You can nest placeholders, where the nested placeholders can be used anywhere in the format specification:

out_str = 'a = {0:.{some_precision}f}'.format(a, some_precision=some_precision)

I used a named placeholder there, but you could use numbered slots too:

out_str = 'a = {0:.{1}f}'.format(a, some_precision)

Autonumbering for nested slots (Python 2.7 and up) is supported too; numbering still takes place from left to right:

out_str = 'a = {0:.{}f}'.format(a, some_precision)

Nested slots are filled first; the current implementation allows you to nest placeholders up to 2 levels, so using placeholders in placeholders in placeholders doesn't work:

>>> '{:.{}f}'.format(1.234, 2)
'1.23'
>>> '{:.{:{}}f}'.format(1.234, 2, 'd')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Max string recursion exceeded

You also can't use placeholders in the field name (so no dynamic allocation of values to slots).

like image 163
Martijn Pieters Avatar answered Aug 30 '26 10:08

Martijn Pieters



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!