回复: Inconsistent results for division and multiplication operations

szy <598546998@qq.com>

From: szy <598546998@qq.com>
To: Erik Brandsberg <erik@heimdalldata.com>
Cc: pgsql-sql <pgsql-sql@lists.postgresql.org>
Date: 2024-11-25T16:12:15Z
Lists: pgsql-sql
If the number of significant digits in the input is not fixed, it becomes challenging to achieve consistent results by rounding.
for example
postgres=# select round(1.003/1.002*5.01,2);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;?column?
--------------------------
&nbsp;5.01&nbsp;&nbsp;
(1 row)


postgres=# select round(1.003*5.01/1.002,2);
&nbsp; &nbsp; &nbsp; ?column?
--------------------
&nbsp;5.02
(1 row)



szy
598546998@qq.com



&nbsp;


This is a common issue with using floating point math.&nbsp; You will see the same issue with many systems.&nbsp; Basically, the order of operations can trigger very minor differences in results, but if you round the first result to the same number of significant&nbsp;digits as the input, it would be identical.&nbsp;&nbsp;https://learn.microsoft.com/en-us/office/troubleshoot/access/floating-calculations-info




On Mon, Nov 25, 2024 at 10:46 AM szy <598546998@qq.com&gt; wrote:



Hi PostgreSQL community,


I have observed inconsistent results when performing division and multiplication operations in PostgreSQL.


postgres=# select 1.003/1.002*5.01;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;?column?
--------------------------
&nbsp;5.0149999999999999999806&nbsp;&nbsp;
(1 row)


postgres=# select 1.003*5.01/1.002;
&nbsp; &nbsp; &nbsp; ?column?
--------------------
&nbsp;5.0150000000000000
(1 row)


However, the expected result should be consistent for both queries. The actual results differ





szy
598546998@qq.com



&nbsp;