Hi Tim,

> I don't see a change made, so perhaps I was unclear in what I said. What I 
> meant was: Please add a full stub example including all the interfaces, 
> properties, and methods. It's currently split across multiple code blocks and 
> the interfaces are missing entirely.
> 
> Example:
> 
>    final readonly class Number implements \Stringable {
>        public string $value;
>        // Further properties omitted for brevity.
> 
>        public function add(Number|string|int $num): Number {}
>        // Further methods omitted for brevity.
>    }

Ah I see. I misunderstood. I will add it when the discussion is settled.

>>> - 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.
> 
> Sure, just send me an email and I'm happy to look over it before you put it 
> up for discussion.

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?
> 
> It appears the underlying icu4c library supports formatting numeric strings, 
> yes:
> 
> https://unicode-org.github.io/icu-docs/apidoc/dev/icu4c/classicu_1_1NumberFormat.html#a8ed2ca7b9a65bf08c4ef81bbf9680f0d

What I meant was that there is currently no such function in PHP. Do you think 
I should propose adding it to this RFC?


>>> - 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?
> 
> I think making this an error would be appropriate. Generally speaking: 
> Removing errors later is always possible if we find out that an operation is 
> safe and well-defined. Adding an error if we find out that an operation is 
> unsafe will result in breaking changes, thus we should get it right on the 
> first try.

I agree, but if we adopt Rowan's suggestion this issue will go away, so if the 
issue is still there when things calm down I'll add the error.

Regards.

Saki

Reply via email to