On Mon, Nov 23, 2009 at 12:23, Wayne Werner <waynejwer...@gmail.com> wrote: > On Mon, Nov 23, 2009 at 12:28 PM, Richard D. Moores <rdmoo...@gmail.com> > wrote: >> >> Can't find the answer in the docs for 3.1 >> >> To print 123**34.6 to 5 sig digits, >> >> print("%.*e" % (4, 123**34.6)) >> >> will do the job: >> >> >>> print("%.*e" % (4, 123**34.6)) >> 2.0451e+72 >> >> However, if the number is 123**346, using >> >> print("%.*e" % (4, 123**346)) >> >> gets me >> >> >>> print("%.*e" % (5, 123**346)) >> Traceback (most recent call last): >> File "<pyshell#28>", line 1, in <module> >> print("%.*e" % (5, 123**346)) >> OverflowError: Python int too large to convert to C double > > Try the decimal module: > http://docs.python.org/library/decimal.html > HTH, > Wayne
Yes, I just found this function in my collection of functions. I believe I wrote this one myself, but I can't remember for sure: ======================================= def numberRounding(n, significantDigits): """ Rounds a string in the form of a string number (float or integer, negative or positive) to any number of significant digits. If an integer, there is no limitation on it's size. Safer to always have n be a string. """ import decimal def d(x): return decimal.Decimal(str(x)) decimal.getcontext().prec = significantDigits s = str(d(n)/1) s = s.lstrip('0') return s ======================================= >>> numberRounding(123**346,5) '1.2799E+723' >>> numberRounding(123**34.6,5) '2.0451E+72' >>> numberRounding(12345**6789,3) '1.36E+27777' >>> numberRounding(3.4**-12.9,6) '1.39291E-7' Dick _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor