[Tutor] Decimal module question

Dick Moores 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 
>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

Thanks very much, Kent.

Dick







More information about the Tutor mailing list