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 ``` > - is_representable_as_float() Now, `is_representable_as_float(mixed $value): bool`. The function would check if a value can be represented as a float without precision loss. - Integers: returns true if within the IEEE 754 safe integer range (+/-(2^53-1)) regardless of the system's PHP_INT_MAX - Strings: returns true if parseable as a float within safe precision bounds - Floats always returns true - The IEEE 754 safe integer limit applies universally This give the following examples: ```php is_representable_as_float(2**53 - 1); // true is_representable_as_float(2**53); // false, precision loss when casted to float is_representable_as_float(PHP_INT_MAX); // false on 64-bit, true on 32-bit is_representable_as_float(42); // true is_representable_as_float("123.456"); // true is_representable_as_float("1e308"); // true is_representable_as_float("1e400"); // false ``` What do you think of this new approach? Best, Alexandre Daubois