[Tutor] Rounding to n significant digits?
Tim Peters
tim.peters at gmail.com
Fri Jul 2 23:18:55 EDT 2004
[Dick Moores]
> ...
> No, the 3 examples I gave are exactly what I want:
> float = 123.456789, n = 4, returns 123.5
> float = .000000123456789, n = 2, returns .00000012
> float = 123456789, n = 5, returns 123460000
I expect the easiest way to do this in Python is to convert to string
using an %e format, then convert that back to float again. Like this:
"""
def round_to_n(x, n):
if n < 1:
raise ValueError("number of significant digits must be >= 1")
# Use %e format to get the n most significant digits, as a string.
format = "%." + str(n-1) + "e"
as_string = format % x
return float(as_string)
print round_to_n(123.456789, 4)
print round_to_n(.000000123456789, 2)
print round_to_n(123456789, 5)
"""
That displays
123.5
1.2e-007
123460000.0
Be sure to the read the appendix on floating-point issues in the
Python Tutorial too! You clearly have decimal digits in mind, but
that's not how your computer's floating-point hardware works. The
appendix talks about the consequences of that.
More information about the Tutor
mailing list