为什么浮点值只能作为条件中的文本找到

Wal*_*rus 1 sql postgresql

如果没有引用参数,为什么它找不到行?

CREATE TABLE test (id integer, value real);
INSERT INTO test VALUES (1, 0.1);
Run Code Online (Sandbox Code Playgroud)

不起作用:

SELECT * FROM test where value = 0.1;
 id | value
----+-------
(0 rows)
Run Code Online (Sandbox Code Playgroud)

作品!

SELECT * FROM test where value = '0.1';
 id | value
----+-------
  1 |   0.1
(1 row)
Run Code Online (Sandbox Code Playgroud)

Luk*_*zda 5

你应该避免不精确的数据类型(如real):

不精确意味着某些值无法精确转换为内部格式并存储为近似值,因此存储和检索值可能会略有差异.管理这些错误以及它们如何通过计算传播是数学和计算机科学的整个分支的主题,除了以下几点之外,这里不再讨论:

  • 如果您需要精确的存储和计算(例如货币金额),请改用数字类型.

  • 如果你想对这些类型进行复杂的计算以获得重要的东西,特别是如果你依赖边界情况下的某些行为(无穷大,下溢),你应该仔细评估实现.

  • 比较两个浮点值是否相等可能并不总是按预期工作.

如果您坚持使用real,请确保两个参数具有相同的数据类型:

SELECT * FROM test where value = 0.1::real;
Run Code Online (Sandbox Code Playgroud)

DBFiddle演示