Re: [RFC] [Discussion] Support object type in BCMath
| From: | Saki Takamachi | Date: | Wed, 10 Apr 2024 16:45:23 +0000 |
| Subject: | Re: [RFC] [Discussion] Support object type in BCMath | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-123096@lists.php.net to get a copy of this message | ||
Hi Rowan,
> Yes, I agree there's a dilemma there.
>
> The extra point in favour of TOWARD_ZERO is that it's more efficient, because we
> don't have to over-calculate and round, just pass scale directly to the implementation. Any
> other option makes for unnecessary extra calculation in code like this:
>
> $total = new Number('20');
> $raw_frac = $total / 7;
> $rounded_frac = $raw_frac->round(2, Round::HALF_UP);
>
> If HALF_UP rounding is the implied default, we have to calculate with scale 11 giving
> 1.42857142857, round to 1.4285714286, then round again to 1.43.
>
> If truncation / TOWARD_ZERO is the implied default, we only calculate with scale 10 giving
> 1.4285714285 and then round once to 1.43.
>
> (Of course, in this example, the most efficient would be for the user to write $rounded_frac =
> $total->div(7, 2, Round::HALF_UP) but they might have reasons to keep the division and rounding
> separate.)
Thanks, when I expand on this issue, I'll also mention the pros and cons of both, including the
points you mentioned.
Regards,
Saki