📅  最后修改于: 2023-12-03 15:18:39.280000             🧑  作者: Mango
PostgreSQL 支持多种浮点数据类型,包括单精度浮点型(FLOAT4
),双精度浮点型(FLOAT8
),和 NUMERIC
类型。这些数据类型非常适合处理需要高精度计算的数据。
FLOAT4
)FLOAT4
是 4 个字节的单精度浮点类型,范围为 -3.4028235E38
到 +3.4028235E38
。
CREATE TABLE test_float (
id SERIAL PRIMARY KEY,
value FLOAT4
);
INSERT INTO test_float (value) VALUES (3.14), (1.23), (-2.5);
FLOAT8
)FLOAT8
是 8 个字节的双精度浮点类型,范围为 -1.7976931348623157E308
到 +1.7976931348623157E308
。
CREATE TABLE test_double (
id SERIAL PRIMARY KEY,
value FLOAT8
);
INSERT INTO test_double (value) VALUES (3.14), (1.23), (-2.5);
NUMERIC
类型NUMERIC
类型可以存储比双精度浮点型和单精度浮点型更高的精度。NUMERIC
类型可以指定任意精度和小数位数。
CREATE TABLE test_numeric (
id SERIAL PRIMARY KEY,
value NUMERIC(10, 5)
);
INSERT INTO test_numeric (value) VALUES (3.14), (1.23), (-2.5);
当进行浮点型数据的比较时,需要注意它们的精度问题。建议使用 NUMERIC
类型进行比较,以保证结果的准确性。
SELECT * FROM test_float WHERE value = 1.23;
-- 返回结果为 0 行
SELECT * FROM test_double WHERE value = 1.23;
-- 返回结果为 1 行
SELECT * FROM test_numeric WHERE value = 1.23;
-- 返回结果为 1 行
以上示例说明,使用 FLOAT4
或 FLOAT8
类型进行比较时,可能会出现精度问题,返回结果不准确。而使用 NUMERIC
类型则可以避免这种问题。