PostgreSQL中extra_float_digits参数可以用来控制浮点数输出的精度,可能我们在平时使用中并不太会留意,那我们下来看下面这个例子。
建一张表,两个字段类型分别是float和numeric,然后插入数据
bill@bill=>create table t1(c1 float,c2 numeric);
CREATE TABLE
bill@bill=>insert into t1 values(0.55555555555555555,0.55555555555555555);
INSERT 0 1
接下来我们去查询,你就会发现查出来的数据竟然和我们插入的不一样了!
bill@bill=>select * from t1;
c1 | c2
-------------------+---------------------
0.555555555555556 | 0.55555555555555555
(1 row)
好像这样看上去并没有什么,但是会很容易给我们产生误导,让你以为c1字段插入的值是0.555555555555556,其实并不是。可以看到下面的查询并没有记录。
bill@bill=>select * from t1 where c1 >= 0.555555555555556;
c1 | c2
----+----
(0 rows)
这是为什么呢?其实表中存的数据还是原先的0.55555555555555555,只是显示出来错误了,所以我们要这样去查询:
bill@bill=>select * from t1 where c1::numeric >= 0.555555555555556;
c1 | c2
-------------------+---------------------
0.5555555555