On Fri, 9 Oct 2020 at 23:41, Tim Peters <tim.pet...@gmail.com> wrote:
> But the decimal spec takes a different approach, which Python's docs
> don't explain at all:  the otherwise-mysterious ROUND_05UP rounding
> mode.  Quoting from the spec:
>
>     http://speleotrove.com/decimal/damodel.html
>     ...
>     The rounding mode round-05up permits arithmetic at shorter
>     lengths to be emulated in a fixed-precision environment without
>     double rounding. For example, a multiplication at a precision of 9
>     can be effected by carrying out the multiplication at (say) 16
>     digits using round-05up and then rounding to the required length
>     using the desired rounding algorithm.
>
> In your original example,  1.01 * 1.46 rounds to 4-digit 1.474 under
> ROUND_05UP. and then `quantize()` can be used to round that back to 1,
> 2, or 3 digits under any rounding mode you like.
>
> Or, with your last example,
>
> >>> with decimal.localcontext() as ctx:
> ...     ctx.rounding = decimal.ROUND_05UP
> ...     r = D('1.00000000000001')*D('1.49999999999996')
> >>> r
> Decimal('1.499999999999974999999999999')
> >>> r.quantize(D('.00000000000001'))
> Decimal('1.49999999999997')

And can't be this the default of decimal? For what I know, this is the
default of BigDecimal in Java:

> public BigDecimal multiply(BigDecimal multiplicand)
>
> Returns a BigDecimal whose value is (this × multiplicand), and whose scale is 
> (this.scale() + multiplicand.scale()).
> Parameters:multiplicand - value to be multiplied by this 
> BigDecimal.Returns:this * multiplicand
>
>
> public BigDecimal multiply(BigDecimal multiplicand,
>                            MathContext mc)
>
> Returns a BigDecimal whose value is (this × multiplicand), with rounding 
> according to the context settings.

Example online:  http://tpcg.io/5axMxUQb
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/VPAV3T2XN4DARL5RNBNCYFP5IP4BGYAX/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to