Re: BUG #18976: -0.0 with float8 will be transformed to 0 in prepare statement but not in normal execution
Laurenz Albe <laurenz.albe@cybertec.at>
From: Laurenz Albe <laurenz.albe@cybertec.at>
To: 798604270@qq.com, pgsql-bugs@lists.postgresql.org
Date: 2025-07-03T12:23:42Z
Lists: pgsql-bugs
On Thu, 2025-07-03 at 03:03 +0000, PG Bug reporting form wrote: > The following bug has been logged on the website: > > Bug reference: 18976 > Logged by: Chi Zhang > Email address: 798604270@qq.com > PostgreSQL version: 18beta1 > Operating system: Ubuntu 24.04 and docker > Description: > > The value -0.0 with float8 is transformed to 0 in prepared statements but > remains -0 in normal execution. Although 0 and -0 are numerically equal, > this discrepancy can lead to subtle bugs in certain cases—for example, when > the value is cast to a VARCHAR, as illustrated below. > > PREPARE prepare_query (float8) AS SELECT CAST($1 AS VARCHAR) = > CAST(-0.0::float8 AS VARCHAR); > EXECUTE prepare_query(-0.0); -- f That's not a bug, but a pilot error. If you feed a "float8", the result ist TRUE: EXECUTE prepare_query(-0.0::float8); ?column? ══════════ t (1 row) Yours, Laurenz Albe