rfc:integer-rounding
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
rfc:integer-rounding [2024/02/25 16:52] – introduce force_float argument mabe | rfc:integer-rounding [2024/03/09 06:54] – wording mabe | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: Rounding Integers as int ====== | ====== PHP RFC: Rounding Integers as int ====== | ||
- | * Version: 0.1 | + | * Version: 0.2 |
* Date: 2023-09-26 | * Date: 2023-09-26 | ||
* Author: Marc Bennewitz, php@mabe.berlin | * Author: Marc Bennewitz, php@mabe.berlin | ||
Line 17: | Line 17: | ||
In most cases this is sufficient but in cases of handling integer values above 2^53 you start to end up with unexpected results due to floating point arithmetic and precision loss. | In most cases this is sufficient but in cases of handling integer values above 2^53 you start to end up with unexpected results due to floating point arithmetic and precision loss. | ||
- | '' | + | '' |
Line 27: | Line 27: | ||
For '' | For '' | ||
- | An additional argument will be introduced | + | An additional argument will be introduced |
- | In PHP 8.4 this will default to `force_float=true` to keep current behavior but the new behavior can already be used by passing | + | In PHP 8.next this will default to '' |
- | In PHP 9.0 the default will change to `force_float=true` to get the new behavior by default but the previous behavior can be forced with `force_float=true`. | + | In PHP 9.0 the default will change to '' |
Line 43: | Line 43: | ||
// rounding integers with force_float=false will process and return int if possible | // rounding integers with force_float=false will process and return int if possible | ||
- | // else with force_float=true it will process on int but cast the result to float to keep previous behavior | ||
ceil(int, force_float=false): | ceil(int, force_float=false): | ||
ceil(int, force_float=true): | ceil(int, force_float=true): | ||
Line 51: | Line 50: | ||
round(int, precision: < 0, force_float=false): | round(int, precision: < 0, force_float=false): | ||
round(int, force_float=true): | round(int, force_float=true): | ||
- | |||
</ | </ | ||
Line 72: | Line 70: | ||
var_dump(takeFloat(round(987654321098765432, | var_dump(takeFloat(round(987654321098765432, | ||
var_dump(returnFloat(round(987654321098765432, | var_dump(returnFloat(round(987654321098765432, | ||
+ | |||
+ | echo " | ||
+ | |||
+ | var_dump(round(1, | ||
+ | var_dump(round(1.0, | ||
+ | var_dump(round(987654321098765432, | ||
+ | var_dump(round(987654321098765432, | ||
+ | var_dump(takeFloat(round(987654321098765432, | ||
+ | var_dump(returnFloat(round(987654321098765432, | ||
+ | |||
+ | echo " | ||
+ | |||
+ | var_dump(round(1, | ||
+ | var_dump(round(1.0, | ||
+ | var_dump(round(987654321098765432, | ||
+ | var_dump(round(987654321098765432, | ||
+ | var_dump(takeFloat(round(987654321098765432, | ||
+ | var_dump(returnFloat(round(987654321098765432, | ||
</ | </ | ||
Line 82: | Line 98: | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
+ | ######################### | ||
+ | Unknown named parameter $force_float | ||
</ | </ | ||
- | 8.4 behavior: | + | 8.4 behavior |
< | < | ||
float(1) | float(1) | ||
float(1) | float(1) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
+ | float(9.8765432109877E+17) | ||
+ | float(9.87654321098766E+17) | ||
+ | float(9.87654321098766E+17) | ||
+ | ######################### | ||
+ | float(1) | ||
+ | float(1) | ||
+ | float(9.87654321098766E+17) | ||
+ | float(9.8765432109877E+17) | ||
+ | float(9.87654321098766E+17) | ||
+ | float(9.87654321098766E+17) | ||
+ | ######################### | ||
+ | int(1) | ||
+ | float(1) | ||
+ | int(987654321098765000) | ||
float(9.8765432109877E+17) | float(9.8765432109877E+17) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
Line 96: | Line 128: | ||
9.0 behavior (Changed default behavior): | 9.0 behavior (Changed default behavior): | ||
< | < | ||
+ | int(1) | ||
+ | float(1) | ||
+ | int(987654321098765000) | ||
+ | float(9.8765432109877E+17) | ||
+ | float(9.87654321098766E+17) | ||
+ | float(9.87654321098766E+17) | ||
+ | ######################### | ||
+ | float(1) | ||
+ | float(1) | ||
+ | float(9.87654321098766E+17) | ||
+ | float(9.8765432109877E+17) | ||
+ | float(9.87654321098766E+17) | ||
+ | float(9.87654321098766E+17) | ||
+ | ######################### | ||
int(1) | int(1) | ||
float(1) | float(1) | ||
Line 112: | Line 158: | ||
===== Proposed PHP Version(s) ===== | ===== Proposed PHP Version(s) ===== | ||
- | * Introduce new argument | + | * Introduce new argument |
- | * Change default to `force_float=false` as described in PHP 9. | + | * Change default to '' |
===== RFC Impact ===== | ===== RFC Impact ===== |
rfc/integer-rounding.txt · Last modified: 2024/04/02 07:07 by mabe