BUG #15434: NUMERIC without any precision or scale truncates scale to 16 digits
The following bug has been logged on the website:
Bug reference: 15434
Logged by: Andrey L
Email address: parihaaraka@gmail.com
PostgreSQL version: 10.5
Operating system: Ubuntu 16.04
Description:
# select
1800000000000000001::numeric / (10^18)::numeric truncated, -- truncates to
16 digits after decimal point
1800000000000000001::numeric(48,18) / (10^18)::numeric correct,
1800000000000000001::numeric / (10^18)::numeric * (10^18)::numeric
to_be_sure;
truncated | correct | to_be_sure
--------------------+----------------------+--------------------------------------
1.8000000000000000 | 1.800000000000000001 |
1800000000000000000.0000000000000000
(1 row)
"PG" == PG Bug reporting form <noreply@postgresql.org> writes:
PG> 1800000000000000001::numeric / (10^18)::numeric truncated, --
PG> truncates to 16 digits after decimal point
It has to truncate it _somewhere_, because otherwise 1::numeric / 3
would be infinitely long...
The choice that numeric division actually makes is to produce a result
with at least 16 significant figures, but also with at least as many
decimal places as the display scale of either of the inputs.
--
Andrew (irc:RhodiumToad)
вт, 16 окт. 2018 г. в 14:30, Andrew Gierth <andrew@tao11.riddles.org.uk>:
"PG" == PG Bug reporting form <noreply@postgresql.org> writes:
PG> 1800000000000000001::numeric / (10^18)::numeric truncated, --
PG> truncates to 16 digits after decimal pointIt has to truncate it _somewhere_, because otherwise 1::numeric / 3
would be infinitely long...The choice that numeric division actually makes is to produce a result
with at least 16 significant figures, but also with at least as many
decimal places as the display scale of either of the inputs.--
Andrew (irc:RhodiumToad)
It looks like precision does matters.
man: "...up to the implementation limit on precision".
Why we don't want to decrease scale, but we decrease precision without any
problems?
Regards,
Andrey L