Dick Moores wrote: > I wrote this function: > > def numberRounding(n, significantDigits=4): > """ > Rounds a number (float or integer, negative or positive) to any number > of > significant digits. If an integer, there is no limitation on it's size. > """ > import decimal > def d(x): > return decimal.Decimal(str(x)) > decimal.getcontext().prec = significantDigits > return d(n)/1 > > If the last line is written as the more normal-looking "return d(n)", > it won't work. Why?
The context precision is applied to *operations* on decimals, not to construction. The docs for the constructor Decimal([value [, context]]) say, "The context precision does not affect how many digits are stored. That is determined exclusively by the number of digits in value. For example, "Decimal("3.00000")" records all five zeroes even if the context precision is only three." The docs for Context say, "The prec field is a positive integer that sets the precision for *arithmetic operations* in the context." (my emphasis) So you have to perform an operation for the precision to have any effect. Dividing by 1 is an operation. Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor