# Convert floating point number to a certain precision, and then copy to string

## Question:

I have a floating point number, say `135.12345678910`. I want to concatenate that value to a string, but only want `135.123456789`. With print, I can easily do this by doing something like:

``````print "%.9f" % numvar
``````

with `numvar` being my original number. Is there an easy way to do this?

It’s not print that does the formatting, It’s a property of strings, so you can just use

``````newstring = "%.9f" % numvar
``````

Using `round`:

``````>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'
``````

With Python < 3 (e.g. 2.6 [see comments] or 2.7), there are two ways to do so.

``````# Option one
older_method_string = "%.9f" % numvar

# Option two
``````

But note that for Python versions above 3 (e.g. 3.2 or 3.3), option two is preferred.

For more information on option two, I suggest this link on string formatting from the Python documentation.

And for more information on option one, this link will suffice and has info on the various flags.

Python 3.6 (officially released in December of 2016), added the `f` string literal, see more information here, which extends the `str.format` method (use of curly braces such that `f"{numvar:.9f}"` solves the original problem), that is,

``````# Option 3 (versions 3.6 and higher)
``````

In case the precision is not known until runtime, this other formatting option is useful:

``````>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'
``````

The `str` function has a bug. Please try the following. You will see ‘0,196553’ but the right output is ‘0,196554’. Because the `str` function’s default value is ROUND_HALF_UP.

``````>>> value=0.196553500000
>>> str("%f" % value).replace(".", ",")
``````

# Python 3.6

Just to make it clear, you can use f-string formatting. This has almost the same syntax as the `format` method, but make it a bit nicer.

Example:

``````print(f'{numvar:.9f}')
``````

Here is a diagram of the execution times of the various tested methods (from last link above): To set precision with 9 digits, get:

``````print "%.9f" % numvar
``````

Return precision with 2 digits:

``````print "%.2f" % numvar
``````

Return precision with 2 digits and float converted value:

``````numvar = 4.2345
print float("%.2f" % numvar)
``````
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.