zach
zach

Reputation: 31003

"rounding" a negative exponential in python

I am looking to convert some small numbers to a simple, readable output. Here is my method but I wondering if there is something simpler.

x = 8.54768039530728989343156856E-58
y = str(x)
print "{0}.e{1}".format(y.split(".")[0], y.split("e")[1])
8.e-58

Upvotes: 3

Views: 1999

Answers (4)

Charles Merriam
Charles Merriam

Reputation: 20500

There are two answers: one for using the number and one for simple display.

For actual numbers:

>>> round(3.1415,2)
3.14
>>> round(1.2345678e-10, 12)
1.23e-10

The built-in round() function will round a number to an arbitrary number of decimal places. You might use this to truncate insignificant digits from readings.

For display, it matters which version of display you use. In Python 2.x, and deprecated in 3.x, you can use the 'e' formatter.

>>> print "%6.2e" % 1.2345678e-10
1.23e-10

or in 3.x, use:

>>> print("{:12.2e}".format(3.1415))
    3.14e+00
>>> print("{:12.2e}".format(1.23456789e-10))
    1.23e-10

or, if you like the zeros:

>>> print("{:18.14f}".format(1.23456789e-10))
  0.00000000012346

Upvotes: 0

Andrew Clark
Andrew Clark

Reputation: 208465

This gets you pretty close, do you need 8.e-58 exactly or are you just trying to shorten it into something readable?

>>> x = 8.54768039530728989343156856E-58
>>> print "{0:.1e}".format(x)
8.5e-58

An alternative:

>>> print "{0:.0e}".format(x)
9e-58

Note that on Python 2.7 or 3.1+, you can omit the first zero which indicates the position, so it would be something like "{:.1e}".format(x)

Upvotes: 4

dfb
dfb

Reputation: 13289

Another way of doing it, if you ever want to extract the exponent without doing string manipulations.

def frexp_10(decimal):
   logdecimal = math.log10(decimal)
   return 10 ** (logdecimal - int(logdecimal)), int(logdecimal)

>>> frexp_10(x)
(0.85476803953073244, -57)

Format as you wish...

Upvotes: 1

mata
mata

Reputation: 69042

like this?

>>> x = 8.54768039530728989343156856E-58
>>> "{:.1e}".format(x)
'8.5e-58'

Upvotes: 3

Related Questions