Thread: Silent truncation of numeric values.

Silent truncation of numeric values.

From
Rajesh Kumar Mallah
Date:

Hi,

How come numeric(10,2) accepting value 10.011 and truncating the .001
part ? Shudnt' it be complaining , i am not sure.


Regds
Mallah.


tradein_clients=# CREATE TABLE t_a ( a numeric (10,2) );
CREATE TABLE
tradein_clients=#
tradein_clients=#
tradein_clients=# \d t_a
         Table "public.t_a"
 Column |     Type      | Modifiers
--------+---------------+-----------
 a      | numeric(10,2) |

tradein_clients=# INSERT INTO t_a values(10.01);
INSERT 50817524 1
tradein_clients=# INSERT INTO t_a values(10.011);
INSERT 50817525 1
tradein_clients=#
tradein_clients=#
tradein_clients=# SELECT * from t_a;
   a
-------
 10.01
 10.01
(2 rows)

tradein_clients=#

Re: Silent truncation of numeric values.

From
Stephan Szabo
Date:
On Sat, 22 Nov 2003, Rajesh Kumar Mallah wrote:

> How come numeric(10,2) accepting value 10.011 and truncating the .001
> part ? Shudnt' it be complaining , i am not sure.

AFAICS, the spec says that implementation-defined rounding or truncation
occurs if least significant digits would be lost.  It appears to only be
an error if most significant digits would be lost.

For example:
 If an assignment would result in a loss of the most significant digits,
an exception condition is raised. If least significant digits are lost,
implementation-defined rounding or truncating occurs with no exception
condition being raised.