[Tutor] Decimal module question
rdm at rcblue.com
Wed Dec 6 14:49:56 CET 2006
At 05:35 AM 12/6/2006, Kent Johnson wrote:
>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
>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.
Thanks very much, Kent.
More information about the Tutor