Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在postgres中为类型双精度添加检查约束_Postgresql_Char_String Length_Double Precision - Fatal编程技术网

Postgresql 在postgres中为类型双精度添加检查约束

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精度,最好的方法是将双

我在一列中有双精度类型的坐标。我想检查小数点前(小数点前)的长度(必须是7)。这些数字最多可以有4位小数

我的第一个想法是:

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)