Numeric field quirk [Again]

Started by Matthew Hagertyover 25 years ago4 messageshackers
Jump to latest
#1Matthew Hagerty
matthew@venux.net

Greetings,

Well, it seems that the numeric issue I was having has nothing to do with
the precision and scale being set the same, it has to do with the input
data. The precision has to be at least 2 greater than the biggest number
you need to enter, i.e.

equinox=# create table test ( d numeric(4,2) );
CREATE
equinox=# insert into test values(10);
INSERT 167844 1
equinox=# insert into test values(101);
ERROR: overflow on numeric ABS(value) >= 10^2 for field with precision 4
scale 2

Matthew

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Matthew Hagerty (#1)
Re: Numeric field quirk [Again]

Matthew Hagerty <matthew@venux.net> writes:

Well, it seems that the numeric issue I was having has nothing to do with
the precision and scale being set the same, it has to do with the input
data. The precision has to be at least 2 greater than the biggest number
you need to enter, i.e.

equinox=# create table test ( d numeric(4,2) );
CREATE
equinox=# insert into test values(10);
INSERT 167844 1
equinox=# insert into test values(101);
ERROR: overflow on numeric ABS(value) >= 10^2 for field with precision 4
scale 2

Precision is the total number of digits, scale is the number of digits
to the right of the decimal point. So the above (4,2) means numbers
like XX.XX --- and obviously 10 fits, 101 doesn't. Your previous
example of (3,3) means numbers like .XXX --- no integer will fit,
but fractions will. I see no bug here...

regards, tom lane

#3Jan Wieck
JanWieck@Yahoo.com
In reply to: Matthew Hagerty (#1)
Re: Numeric field quirk [Again]

Matthew Hagerty wrote:

Greetings,

Well, it seems that the numeric issue I was having has nothing to do with
the precision and scale being set the same, it has to do with the input
data. The precision has to be at least 2 greater than the biggest number
you need to enter, i.e.

equinox=# create table test ( d numeric(4,2) );
CREATE
equinox=# insert into test values(10);
INSERT 167844 1
equinox=# insert into test values(101);
ERROR: overflow on numeric ABS(value) >= 10^2 for field with precision 4
scale 2

The scale digits aren't added, they are taken from the
precision specified digits. Numeric(4.2) is 99.99,
numeric(8.2) is 999999.99 and numeric(4.4) is .9999 - so the
above looks correct to me.

Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck@Yahoo.com #

#4Bruce Momjian
bruce@momjian.us
In reply to: Matthew Hagerty (#1)
Re: Numeric field quirk [Again]

Greetings,

Well, it seems that the numeric issue I was having has nothing to do with
the precision and scale being set the same, it has to do with the input
data. The precision has to be at least 2 greater than the biggest number
you need to enter, i.e.

equinox=# create table test ( d numeric(4,2) );
CREATE
equinox=# insert into test values(10);
INSERT 167844 1
equinox=# insert into test values(101);
ERROR: overflow on numeric ABS(value) >= 10^2 for field with precision 4
scale 2

The variable above is 4 digits, with 2 digits to the right of the
decimal place. Doing numberic(3,3) allows insertion of 0.4, but not
4.0. This is expected.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026