我有这个查询
SELECT sum(t1.c1::float) AS total
FROM schema1.t1
WHERE ((1 = 1) AND (t1.c2 IS NOT NULL))
但每次我运行它时,它都会给我另一个像一样的结果
- 174547685874384
- 174547685874385
- 174547685874386
- 174547685874385
等。它只是给了我一个不完美的结果。
你们能给我一个办法吗?
这可能与t1.c1
的数据类型有关。
如果数据类型被声明为real
,则由于floating-point
数据类型的编码机制,在数学计算和数据类型转换过程中可能会出现意外结果。
我总是使用fixed-point
数据类型(numeric
和decimal
(,而不是floating-point
数据类型(real
和double 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.0000 | 1745000.034570694 |