rfc:change_the_edge_case_of_round

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rfc:change_the_edge_case_of_round [2023/11/08 14:25] sakirfc:change_the_edge_case_of_round [2023/12/08 00:37] (current) saki
Line 1: Line 1:
 ====== PHP RFC: Change the edge case of round() ====== ====== PHP RFC: Change the edge case of round() ======
-  * Version: 0.3.0+  * Version: 0.4.1
   * Date: 2023-10-23   * Date: 2023-10-23
   * Author: Saki Takamachi, saki@sakiot.com   * Author: Saki Takamachi, saki@sakiot.com
-  * Status: Under Discussion+  * Status: Declined
   * First Published at: https://wiki.php.net/rfc/change_the_edge_case_of_round   * First Published at: https://wiki.php.net/rfc/change_the_edge_case_of_round
  
Line 78: Line 78:
 <code> <code>
 p 0.285.round(2) p 0.285.round(2)
 +// 0.29
 +
 +p 0.28499999999999998.round(2)
 // 0.29 // 0.29
 </code> </code>
Line 86: Line 89:
  
 print(round(1.555, 2)) print(round(1.555, 2))
 +// 1.55
 +
 +print(round(1.5549999999999999, 2))
 // 1.55 // 1.55
 </code> </code>
 +
 +Ruby behaves the same as current PHP, and Python behaves the same as this RFC aims to do.
 +
 +==== Reference: Databases ====
 +
 +When it comes to databases, there are two types of values: exact values ​​and approximate values. Verify using approximate values ​​to align with PHP. Since even rounding may occur, I use 1.555, just like in Python.
 +
 +MySQL:
 +<code>
 +mysql> SELECT 1555E-3 = 15549999999999999E-16;
 ++---------------------------------+
 +| 1555E-3 = 15549999999999999E-16 |
 ++---------------------------------+
 +|                               1 |
 ++---------------------------------+
 +
 +mysql> SELECT ROUND(1555E-3, 2);
 ++-------------------+
 +| ROUND(1555E-3, 2) |
 ++-------------------+
 +|              1.56 |
 ++-------------------+
 +
 +mysql> SELECT ROUND(15549999999999999E-16, 2);
 ++---------------------------------+
 +| ROUND(15549999999999999E-16, 2) |
 ++---------------------------------+
 +|                            1.56 |
 ++---------------------------------+
 +</code>
 +
 +SQLite3:
 +<code>
 +sqlite> SELECT 1555E-3 = 15549999999999999E-16;
 +1
 +sqlite> SELECT ROUND(1555E-3, 2);
 +1.56
 +sqlite> SELECT ROUND(15549999999999999E-16, 2);
 +1.56
 +</code>
 +
 +Firebird:
 +<code>
 +SQL> SELECT 1555E-3 FROM RDB$DATABASE;
 +
 +               CONSTANT 
 +======================= 
 +1.554999999999999937828 
 +
 +SQL> SELECT ROUND(1555E-3, 2) FROM RDB$DATABASE;
 +
 +                  ROUND 
 +======================= 
 +1.560000000000000053291 
 +</code>
 +
 +SqlServer:
 +<code>
 +1> SELECT 1555E-3;
 +2> go
 +                        
 +------------------------
 +      1.5549999999999999
 +
 +1> SELECT ROUND(1555E-3, 2);
 +2> go
 +                        
 +------------------------
 +                    1.55
 +</code>
 +
 +MySQL, SQLite, Firebird are similar to current PHP. SqlServer is similar to what this RFC is aiming for.
 +
 +PostgreSQL cannot round double precision values ​​if we specify digits, so omit it.
  
 ===== Proposal ===== ===== Proposal =====
Line 95: Line 175:
 // previous behavior // previous behavior
 var_dump(round(0.285, 2)); // float(0.29) var_dump(round(0.285, 2)); // float(0.29)
 +var_dump(round(0.28499999999999998, 2)); // float(0.29)
  
 // new behavior // new behavior
 var_dump(round(0.285, 2)); // float(0.28) var_dump(round(0.285, 2)); // float(0.28)
 +var_dump(round(0.28499999999999998, 2)); // float(0.28)
 </code> </code>
  
Line 132: Line 214:
  
 ===== Proposed Voting Choices ===== ===== Proposed Voting Choices =====
-We will probably vote for or against adding these functions. This requires 2/3 majority.+ 
 +As per the voting RFC a yes/no vote with a 2/3 majority is needed for this proposal to be accepted. 
 +Voting started on 2023-11-24 and will end on 2023-12-08 00:00 GMT. 
 +<doodle title="Change the edge case of round()" auth="Saki Takamachi" voteType="single" closed="false" closeon="2023-12-08T00:00:00Z"> 
 +   * Yes 
 +   * No 
 +</doodle>
  
 ===== Implementation ===== ===== Implementation =====
rfc/change_the_edge_case_of_round.1699453540.txt.gz · Last modified: 2023/11/08 14:25 by saki