27

I have the following repetitive simple code repeated several times that I would like to make a function for:

for i in range(10):
    id  = "some id string looked up in dict"
    val = 63.4568900932840928 # some floating point number in dict corresponding to "id"
    tabStr += '%-15s = %6.1f\n' % (id,val)

I want to be able to call this function: def printStr(precision)
Where it preforms the code above and returns tabStr with val to precision decimal points.

For example: printStr(3)
would return 63.457 for val in tabStr.

Any ideas how to accomplish this kind of functionality?

4 Answers 4

50
tabStr += '%-15s = %6.*f\n' % (id, i, val)  

where i is the number of decimal places.


BTW, in the recent Python where .format() has superseded %, you could use

"{0:<15} = {2:6.{1}f}".format(id, i, val)

for the same task.

Or, with field names for clarity:

"{id:<15} = {val:6.{i}f}".format(id=id, i=i, val=val)

If you are using Python 3.6+, you could simply use f-strings:

f"{id:<15} = {val:6.{i}f}"
Sign up to request clarification or add additional context in comments.

Comments

15

I know this an old thread, but there is a much simpler way to do this:

Try this:

def printStr(FloatNumber, Precision):
    return "%0.*f" % (Precision, FloatNumber)

Comments

1

Tested in Python 3.8 and 3.9:

>>> val = 1.123456789
>>> decimals = 3
>>> f"{val:0.{decimals}f}"
'1.123'

1 Comment

This solution has already been given.
0

This should work too

tabStr += '%-15s = ' % id + str(round(val, i))

where i is the precision required.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.