## How can I print many significant figures in Python?

For a scientific application I need to output very precise numbers, so I have to print 15 significant figures. There are already questions on this topic here, but they all concern with *truncating* the digits, not *printing more*.

I realized that the `print`

function converts the input `float`

to a 10 character `string`

. Also, I became aware of the `decimal`

module, but that does not suit my needs.

So the question is, how can I easily print a variable amount of signifcant figures of my floats, where I need to display more than 10?

You could use the string formatting operator `%`

:

In [3]: val = 1./3 In [4]: print('%.15f' % val) 0.333333333333333

or `str.format()`

:

In [8]: print(str.format('{0:.15f}', val)) Out[8]: '0.333333333333333'

In new code, the latter is the preferred style, although the former is still widely used.

For more info, see the documentation.

**Controlling the format of printed variables,** You may want to only show a few decimal places, or print in scientific notation, or embed the In python, we use the format function to control how variables are printed. There are many other options for formatting strings. def float_nsf (q, n): """ Truncate a float to n significant figures. May produce overflow in very last decimal place when q < 1. This can be removed by an extra formatted print.

Thought the original question wanted to format n significant figures, not n decimal points. So a custom function might be required until some more native built-in types are on offer? So you'll want something like:

def float_nsf(q,n): """ Truncate a float to n significant figures. May produce overflow in very last decimal place when q < 1. This can be removed by an extra formatted print. Arguments: q : a float n : desired number of significant figures Returns: Float with only n s.f. and trailing zeros, but with a possible small overflow. """ sgn=npy.sign(q) q=abs(q) n=int(npy.log10(q/10.)) # Here you overwrite input n! if q<1. : val=q/(10**(n-1)) else: val=q/(10**n) return sgn*int(val)*10.**n

**Formatting floats to a specific number of significant digits in Python,** Formatting floats to a specific number of significant digits in Python digits you can do "%.3E" % (1.23) and Python will correctly print 1.230E+00 . and fall back to exponential notation when numbers are much greater than 1 Hey there, and welcome to another Python snippet post.This week we're taking a look at some formatting options for string representations of numbers in Python. String formatting is actually a surprisingly large topic, and Python has its own internal mini language just for handling the many formatting options available to us.

Let:

>>> num = 0.0012345

For *3 significant figures*:

>>> f'{num:.3}' '0.00123'

For *3 decimal places*:

>>> f'{num:.3f}' '0.001'

See the "presentation types for floating point and decimal" table at the bottom of this section for any additional requirements provided by `e, E, f, F, g, G, n, %, None`

.

**15. Floating Point Arithmetic: Issues and Limitations,** No matter how many digits you're willing to write down, the result will never be On most machines, if Python were to print the true decimal value of the binary may wish to use string formatting to produce a limited number of significant digits:. For example, if you tried "%.4G" % (1.230) you might expect Python to print "1.230" i.e. you would expect 4 significant figures to be included. What actually happens is that Python trims that trailing zero even though it is a significant digit in this case. So when you try "%.4G" % (1.230) what you get is "1.23" with only 3 significant figures.

Use these two common print idioms for formatting. Its a matter of personal taste on which is better.

value = 10/3 #gives a float of 3.33333..... print '%.15f' % value print str.format('{0:.15f}', value)

Personally I think the first is more compact and the 2nd is more explicit. Format has more features when working with multiple vals.

**[Tutor] Rounding to n significant digits?,** (Which is >why it prints out with more than 3 digits - it is a float >with all n = 5, returns 123460000 The kind of rounding to n significant digits import math maxValue = 12345678 a = maxValue/4.0 # Python 2.x requires either numerator/denominator to be a float to return one print "This is the value of a", a print "This is the ceiling of the division", math.ceil(a) This is the value of a 3086419.5 This is the ceiling of the division 3086420.0

To display N significant figures (not decimal places) you use the "g" format:

>>> x = 1.23 >>> print("%.2g" % x) 1.2 >>> x = 12.3 >>> print("%.2g" % x) 12

See format spec for details on precision:

The precision is a decimal number indicating how many digits should be displayed after the decimal point for a floating point value formatted with 'f' and 'F', or before and after the decimal point for a floating point value formatted with 'g' or 'G'. For non-number types the field indicates the maximum field size - in other words, how many characters will be used from the field content. The precision is not allowed for integer values.

**Formatting Numbers for Printing in Python,** Learn how to leverage Python's detailed formatting language to we can specify how many significant figures we want after the decimal point. I found a solution to this post in another question: Python counting significant digits. The idea here is that you pass the float as a String to the methods, and then the method uses regular expressions to count the number of significant digits by splitting strings where "e" is (for float string in scientific format) and where the dot is (for normal float strings).

**format,** The precision is a decimal number indicating how many digits should be Prints the number in scientific notation using the letter 'e' to indicate the exponent. Specifically, if the number is a terminating decimal with <= 6 significant digits, show it all. However, if it has > 6 significant digits, then output only 6 significant digits. "A" shows how Python is writing the floats. "B" shows how I want them written.

**How do I round to 2 decimals in python? · GitHub,** In python, you have floats and decimals that can be rounded. If you care about the %s required to prevent python from printing float in e- scientific notation. Historically, the Python prompt and built-in repr() function would choose the one with 17 significant digits, 0.10000000000000001. Starting with Python 3.1, Python (on most systems) is now able to choose the shortest of these and simply display 0.1.

**Precision Handling in Python,** There are many ways to set precision of floating point value. Some of them is discussed using format() to print value till 2 decimal places. print ( "The value of There is no control over the number of decimals, or spaces around a printed number. In python, we use the format function to control how variables are printed. With the format function you use codes like { n :format specifier} to indicate that a formatted string should be used.