Thread: BUG #15434: NUMERIC without any precision or scale truncates scale to16 digits

BUG #15434: NUMERIC without any precision or scale truncates scale to16 digits

From
PG Bug reporting form
Date:
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 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)

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