📜  postgresql 浮点数据类型 - SQL (1)

📅  最后修改于: 2023-12-03 15:18:39.280000             🧑  作者: Mango

PostgreSQL 浮点数据类型 - SQL

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 行

以上示例说明,使用 FLOAT4FLOAT8 类型进行比较时,可能会出现精度问题,返回结果不准确。而使用 NUMERIC 类型则可以避免这种问题。