Postgresql 在postgres中为类型双精度添加检查约束
我在一列中有双精度类型的坐标。我想检查小数点前(小数点前)的长度(必须是7)。这些数字最多可以有4位小数 我的第一个想法是:Postgresql 在postgres中为类型双精度添加检查约束,postgresql,char,string-length,double-precision,Postgresql,Char,String Length,Double Precision,我在一列中有双精度类型的坐标。我想检查小数点前(小数点前)的长度(必须是7)。这些数字最多可以有4位小数 我的第一个想法是: CHECK (char_length(point_gauss::double precision::char)=... 对于浮点,请记住这些是二进制浮点类型,因此十进制精度是一个有点问题的概念。你的第一本能应该是: CHECK(point_gauss BETWEEN -9999.999 AND 9999.999) 但是,如果您需要特定的基数10精度,最好的方法是将双
CHECK (char_length(point_gauss::double precision::char)=...
对于浮点,请记住这些是二进制浮点类型,因此十进制精度是一个有点问题的概念。你的第一本能应该是:
CHECK(point_gauss BETWEEN -9999.999 AND 9999.999)
但是,如果您需要特定的基数10精度,最好的方法是将双精度更改为数字,并使用以下方法:
point_gauss NUMERIC(7,3),....
浮点值(或变量)没有“长度”。(1/3)的“长度”是多少?好的。选择十进制类型更好吗?在我的例子中,
decimal(11,4)
。这取决于变量应该表示什么。我有高斯-克鲁格坐标。我希望避免插入错误的值。类似于小数点前有6个数字的坐标。正因为如此,我想检查“长度”。在我看来,浮点对于坐标系来说是足够精确的。为什么不添加一个范围约束,比如(value>=-90.0和value)