On Mon, Jul 28, 2025, at 8:00 AM, Alexandre Daubois wrote:
> Le lun. 28 juil. 2025 à 12:14, Gina P. Banyard <intern...@gpb.moe> a écrit :
>> For naming, maybe the following pair of functions make sense?
>> - is_representable_as_int()
>
> Definitely, thank you for proposing. Having a pair of functions for
> bidirectional transformations makes much more sense than a single
> ambiguous function. Here are some quick specs for what these functions
> could do.
>
> `is_representable_as_int(mixed $value): bool` checks if a given value
> can be losslessly converted to an integer.
>
> - Floats: returns true if the float is within PHP_INT_MIN to
> PHP_INT_MAX range AND has no fractional part
> - Strings: returns true if the string represents a valid integer
> within the platform's integer range
> - Always returns true for integers
> - Special float values: returns false for NaN, INF, -INF
>
> This gives the following example:
>
> ```php
> is_representable_as_int(42.0);        // true
> is_representable_as_int(42.5);        // false
> is_representable_as_int(2**31);       // false on 32-bit, true on 64-bit
> is_representable_as_int(2**63);       // false on both platforms
> is_representable_as_int("123");       // true
> is_representable_as_int("123.0");     // true
> is_representable_as_int("123.5");     // false
> is_representable_as_int(NAN);         // false
> ```

Even without the precision loss question, such a function would be very useful 
when parsing input data of unknown type (and thus is a string).  "Can I cast 
this string to an int to use with an int parameter without any loss" is 
currently not as simple as it ought to me.  Providing a single standardized 
function for that would be most welcome.

The name is quite long though. :-)

>> - is_representable_as_float()

The same argument applies here, although in most cases is_numeric() is close 
enough.  A more precise option would not be unwelcome, though.

--Larry Garfield

Reply via email to