PostgreSQL:十进制/数字数据类型的数字字段溢出-为什么会出现此错误
我创建了一个这样的表
CREATE TABLE foo (
id serial CONSTRAINT id_pk PRIMARY KEY,
bar varchar(256),
test decimal(5,5)
);
然后我想填充test列
INSERT INTO foo (test) VALUES (12345.12345)
这给了我
数字字段溢出详细信息:精度为 5、小数位数为 5 的字段必须舍入到小于 1 的绝对值。
我不明白。但是,如果我将一列设置为decimal(5,5),则逗号左侧必须有五位数字,逗号右侧必须有五位数字。我有那个号码12345.12345。
为什么它给我这个错误?
回答
您误解了指定小数的工作原理(我同意这有点令人困惑)。
从手册中引用
数字的精度是整数中有效数字的总数,即小数点两边的位数。数字的小数位数是小数部分的小数位数,在小数点的右边
所以第一个数字定义了总位数,第二个数字定义了小数位数。
如果你想要小数点前 5 位和小数点后 5 位,你需要使用 decimal(10,5)
THE END
二维码