Hi Tim,

> - The namespace is inconsistently referred to as "BCMath" and "BcMath", 
> please check the entire RFC to unify the casing.

Thanks, I fixed it.


> - The full “stub” should probably include an explicit "implements Stringable" 
> for clarity.

Agree. I describe it explicitly during implementation.


> - I don't want to expand the scope of your RFC further than necessary, but 
> for the rounding mode, I wonder if we should first add the RoundingMode enum 
> that has been suggested during the discussion of the "Add 4 new rounding 
> modes to round() function" RFC. It would make the type for the 
> `Number::$roundMode` property much clearer than the current `int`. I expect 
> the addition of such an enum to be a pretty simple RFC that would not need 
> much discussion. I'd be happy to co-author it.

Oh, that's a good idea. Makes sense. I think it would be simpler to prepare an 
RFC separate from this RFC, so I'm going to create one right away. Once you 
have a certain amount of content, I would be happy if you could check it out 
and make corrections if necessary.


> - The property should probably be named "$roundingMode" instead of 
> "$roundMode".

Thank you, I'm not a native speaker, so pointing out English expressions is 
very helpful. I fixed it.


> - I'm not sure I like the differing default rounding modes for implicit 
> rounding (i.e. the $roundMode property) and explicit rounding (i.e. the 
> round() method). That sounds like it would cause unnecessary confusion.

I missed the point. All defaults have been changed to HALF_UP.


> - In the stub there's a typo: "puclic", should be "public".

Oops, thanks!


> - For `format()`, I'm not sure whether we should actually add the function. 
> While we have number_format() for regular numbers with the same signature, it 
> fails to account for the different language and cultures in the world. 
> Specifically `number_format()` cannot correctly format numbers for en_IN 
> (i.e. English in India). In India numbers are not separated every three 
> digits, but rather the three right-most digits and then every two digits. 
> Here's in example: 1,23,45,67,890. I believe formatting should be best left 
> for ext/intl.

I'm not very familiar with ext/intl, but is there a way to format a string type 
number without converting it to a float?


> - I'd probably not add the 'with()' method, because it would be redundant 
> with https://wiki.php.net/rfc/clone_with and it can already be specified by a 
> combination of withMaxExpansionScale + withRoundMode.

I see, I wasn't aware of that argument. Removed `with()`.


> - I'm not sure if the priority for the rounding modes is sound. My gut 
> feeling is that operations on numbers with different rounding modes should be 
> disallowed or made explicit during the operation (much like the scale for a 
> division), but I'm not an expert in designing numeric APIs, so I might be 
> wrong here.

As mentioned in the RFC, the problem here is commutative calculations (add, 
sub, mul). This means that even if specify `$roundingMode` during these 
calculations, `$roundingMode` will not be used in these calculations. 
Calculations that use `$roundingMode` are divs, etc. If allow `$roundingMode` 
to be specified with add, intuitively it feels like the result of add will be 
rounded.

Also, it is not possible to specify `$roundMode` in calculations using 
operators.

However, if the user calculates two numbers with different rounding modes, and 
it is intentional rather than a mistake, I can't imagine what kind of result 
the user would want to get. Therefore, it may be better to make this an error.

Is it appropriate to throw a value error in that case?


> - For the RFC Impact on SAPIs, it should simply be "None", because SAPIs do 
> not need to do anything special.

I fixed it.


> - For the Backwards Incompatible Changes, it should list that the 
> BcMath\Number class will no longer be available to userland.

I added that.


Thanks!

Saki

Reply via email to