为什么只要我运行postgresql查询,它就会给出不同的结果



我有这个查询

SELECT sum(t1.c1::float) AS total
FROM schema1.t1
WHERE ((1 = 1) AND (t1.c2 IS NOT NULL))

但每次我运行它时,它都会给我另一个像一样的结果

  1. 174547685874384
  2. 174547685874385
  3. 174547685874386
  4. 174547685874385

等。它只是给了我一个不完美的结果。

你们能给我一个办法吗?

这可能与t1.c1的数据类型有关。

如果数据类型被声明为real,则由于floating-point数据类型的编码机制,在数学计算和数据类型转换过程中可能会出现意外结果。

我总是使用fixed-point数据类型(numericdecimal(,而不是floating-point数据类型(realdouble precision(。

快速演示:

CREATE TABLE t1 (
c0 numeric,  -- fixed-point
c1 real  -- floating-point
);
INSERT INTO t1
VALUES (0.1745, 0.1745)
SELECT
c0 * 10000000 ::numeric AS c0_cal,
c1 * 10000000 ::float AS c1_cal
FROM t1
c0_cal(数字(c1_cal(双精度(
1745000.00001745000.034570694

最新更新