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 16:03] 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.4.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 94: Line 94:
 // 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 ==== ==== Reference: Databases ====
  
-In most databases, 0.285 and 0.28499999999999998 appear to be distinguishable.+When it comes to databases, there are two types of values: exact values ​​and approximate valuesVerify using approximate values ​​to align with PHP. Since even rounding may occur, I use 1.555, just like in Python.
  
 MySQL: MySQL:
 <code> <code>
-mysql> SELECT ROUND(0.285, 2)+mysql> SELECT 1555E-3 = 15549999999999999E-16
-+-----------------+ ++---------------------------------+ 
-ROUND(0.285, 2) +1555E-3 = 15549999999999999E-16 
-+-----------------+ ++---------------------------------+ 
-           0.29 +                              1 
-+-----------------+++---------------------------------+
  
-mysql> SELECT ROUND(0.28499999999999998, 2); +mysql> SELECT ROUND(1555E-3, 2); 
-+-------------------------------+ ++-------------------+ 
-| ROUND(0.28499999999999998, 2) | +| ROUND(1555E-3, 2) | 
-+-------------------------------+ ++-------------------+ 
-                         0.28 +             1.56 
-+-------------------------------+ ++-------------------+
-</code> +
- +
-PostgreSQL: +
-<code> +
-postgres=# SELECT ROUND(0.285, 2); +
- round  +
-------- +
-  0.29+
  
-postgres=# SELECT ROUND(0.28499999999999998, 2); +mysql> SELECT ROUND(15549999999999999E-16, 2); 
- round  ++---------------------------------+ 
-------- +| ROUND(15549999999999999E-16, 2) | 
-  0.28++---------------------------------+ 
 +|                            1.56 | 
 ++---------------------------------+
 </code> </code>
  
 SQLite3: SQLite3:
 <code> <code>
-sqlite> SELECT ROUND(0.285, 2); +sqlite> SELECT 1555E-3 = 15549999999999999E-16; 
-0.29 +
- +sqlite> SELECT ROUND(1555E-3, 2); 
-sqlite> SELECT ROUND(0.28499999999999998, 2); +1.56 
-0.29+sqlite> SELECT ROUND(15549999999999999E-16, 2); 
 +1.56
 </code> </code>
  
 Firebird: Firebird:
 <code> <code>
-SQL> SELECT ROUND(0.285, 2) FROM RDB$DATABASE;+SQL> SELECT 1555E-3 FROM RDB$DATABASE;
  
-                ROUND  +               CONSTANT  
-=====================  +=======================  
-                0.290 +1.554999999999999937828 
  
-SQL> SELECT ROUND(0.28499999999999998, 2) FROM RDB$DATABASE;+SQL> SELECT ROUND(1555E-3, 2) FROM RDB$DATABASE;
  
-                ROUND  +                  ROUND  
-=====================  +=======================  
-  0.28000000000000000 +1.560000000000000053291 
 </code> </code>
  
 SqlServer: SqlServer:
 <code> <code>
-1> SELECT ROUND(0.285, 2);+1> SELECT 1555E-3;
 2> go 2> go
-      +                         
------ +------------------------ 
- .290+      1.5549999999999999
  
-1> SELECT ROUND(0.28499999999999998, 2);+1> SELECT ROUND(1555E-3, 2);
 2> go 2> go
-                    +                         
-------------------- +------------------------ 
- .28000000000000000+                    1.55
 </code> </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 213: 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.1699459392.txt.gz · Last modified: 2023/11/08 16:03 by saki