实际类型的值比较不正确

2024-01-06

我有领域REAL输入数据库。我使用 PostgreSQL。和查询

SELECT * FROM my_table WHERE my_field = 0.15

不返回包含以下值的行my_field is 0.15.

但例如查询

SELECT * FROM my_table WHERE my_field > 0.15

工作正常。

我怎样才能解决这个问题并获得行my_field = 0.15 ?


To solve你的问题使用数据类型numeric https://www.postgresql.org/docs/current/datatype-numeric.html相反,它不是浮点类型,而是任意精度类型。

如果您输入数字文字 https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS-NUMERIC 0.15 into a numeric(同一个词,不同的意思)列,exact金额被存储 - 与real or float8列,其中值被强制为下一个可能的二进制近似值。这可能准确,也可能不准确,具体取决于数量和实现细节。十进制数 0.15 恰好落在可能的二进制表示形式之间,并且存储时存在微小错误。

请注意,计算结果本身可能不准确,因此仍需警惕=在这种情况下操作员。

这也取决于how你测试一下。比较时,Postgres 将不同的数字类型强制转换为最能保存结果的类型。 考虑一下这个demo:

CREATE TABLE t(num_r real, num_n numeric);
INSERT INTO t VALUES (0.15, 0.15);

SELECT num_r, num_n  
     , num_r = num_n       AS test1           --> FALSE
     , num_r = num_n::real AS test2           --> TRUE
     , num_r - num_n       AS result_nonzero  --> float8
     , num_r - num_n::real AS result_zero     --> real
FROM   t;

db<>fiddle
Old sqlfiddle http://www.sqlfiddle.com/#!17/9a5b9c/1

因此,如果您已输入0.15作为数据类型列中的数字文字real,您可以使用以下命令找到所有此类行:

SELECT * FROM my_table WHERE my_field = real '0.15'

Use numeric如果您需要精确存储小数位,请使用列。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实际类型的值比较不正确 的相关文章

随机推荐

  • Safari 不尊重 `transform-origin` SVG 属性

    我正在尝试使用构建 SVGtransform属性 但是 虽然我的 SVG 在 Chrome 和 Firefox 中看起来符合预期 但在 Safari 中看起来却损坏了 看来 Safari 不尊重transform origin属性并始终应用
  • Oracle ODP.Net 和连接池

    我想这确实是两个问题合二为一 我们开发了一个访问 Oracle 数据库的 Net 应用程序 并注意到在更改用户的 Oracle 密码后 该应用程序会在连接字符串中使用旧密码继续运行一小段时间 据推测 这与现有连接的池化方式有关 当第一次调查
  • jQuery:在子元素之前附加子元素

    我有这样的 HTML 代码 div div class foobar div div 我想在里面附加子元素div content之前div foobar元素 怎样才能做到这一点呢 在回答你的问题之前 让我先让你更清楚 更容易地了解一些事情
  • 检测列中导致 SQL 错误的单元格

    假设我们正在尝试更改 SQL 表中列的类型 例如varchar to float 使用 ALTER TABLE
  • 我的搜索没有在谷歌地图中显示其标记有什么问题?

    我创建了一个地方搜索谷歌地图 喜欢搜索学校类型等地方 我为私立和公立学校做了标记 搜索框有效 但是当我单击输入时 它不显示公立 私立学校 是这是因为我的代码 在图标上 或标记 唯一的问题是当我单击输入时 它不显示其标记
  • 将连续日期分组在一起

    我在 Excel csv 中有一个请病假的 许多 员工列表 按以下格式列出 每个病假实例都有自己的线路 我想添加另一列 结果 它记录病期的长度 例如 Mon Tues Wed 表示这三个条目中的每一个都标有 3 我是Python新手 我想知
  • 将大型减速机拆分为较小的减速机

    我有一个称为动物的特征减速器 切片减速器 我想将这些减速器分成哺乳动物 鸟类 鱼类等 这部分很简单 因为我可以简单地使用ActionReducerMap 现在假设哺乳动物的减速器状态很大 我想将其分成几个较小的减速器 即猫的家族 狗的家族等
  • 之间有区别吗?和 * 在 cron 表达式中?奇怪的例子

    我的系统中有以下 cron 表达式 0 0 0 1 1 1 你知道吗 我不知道这意味着什么 写这篇文章的人在接下来的两周里正在度假 所以我必须亲自去了解一下 文档可以找到here https docs oracle com cd E1205
  • 递归函数中的全局变量如何保持为零?

    因此 如果我有一个带有全局变量 var 的递归函数 int var void foo if var 3 return else var foo 然后我有一个调用 foo 的函数 如下所示 void bar foo return 每次 foo
  • 在模拟器上运行 iOS 应用程序,无需构建应用程序

    我想知道是否可以在模拟器上 运行 Xcode 项目 而无需先 构建源代码 当我单击 Xcode 4 0 2 中的 运行 按钮时 它首先构建 然后运行它 是否可以在不构建的情况下运行 如果可能的话 你会怎么做 Edit 这听起来可能是一个奇怪
  • AngularJS 1.2 - ngAnimate 不工作

    我刚开始在 AngularJS 1 2 中使用 ng animate 我不确定为什么我的 ng animate 不能使用某个类名 但可以使用我在示例中看到的简单淡入淡出的默认值 在此示例中 我尝试将 ng animate 类设置为 动画 h
  • numba - guvectorize 只比 jit 快一点

    我试图并行化在许多独立数据集上运行的蒙特卡罗模拟 我发现 numba 的并行 guvectorize 实现仅比 numba jit 实现快 30 40 我找到了这些 1 https stackoverflow com questions 3
  • 如何每 5 分钟执行一次 cron 作业?

    JobDetail job1 JobBuilder newJob FirstJob class withIdentity job1 group1 build Trigger trigger1 TriggerBuilder newTrigge
  • 在 Moq 中为返回 void 的方法分配输出参数

    In 这个问题 https stackoverflow com questions 1068095 assigning out ref parameters in moq 我找到了一个这个答案 https stackoverflow com
  • 修改 Firebase - 动态链接的应用程序预览页面

    有人尝试过从 Firebase 修改此应用程序预览页面吗 我们为其中一个应用程序设置了动态链接并启用了预览页面 我们希望翻译默认字符串 有没有办法翻译一下这句话 保存我在应用程序中的位置 将复制链接以继续此操作 页 以及按钮上的文字 OK
  • 泛型构造函数的好处

    为非泛型类提供泛型构造函数有什么好处 Java 规范允许以下内容 class NonGeneric
  • 如果 isAvailableForServiceType 方法返回 NO 我该怎么办

    如果我能做什么isAvailableForServiceType例如 如果是 Twitter 方法会返回 NO if SLComposeViewController isAvailableForServiceType SLServiceTy
  • 是否可以使用 navigator.share 共享文件(PDF)而不是 url?

    我有一个从服务器生成的 pdf 文件 我希望允许用户通过 navigator share 共享该文件 是否可以共享文件而不是 URL navigator share title Web Fundamentals text Check out
  • 删除由于 gnuplot 中突然跳跃而导致的垂直线

    我正在尝试绘制一个包含 gnuplot 中不连续性的函数 结果 gnuplot 自动绘制一条连接跳跃不连续点的垂直线 我想删除这一行 我环顾四周 发现了两种解决方案 但都不起作用 一种解决方案是使用smooth unique绘图时 另一种是
  • 实际类型的值比较不正确

    我有领域REAL输入数据库 我使用 PostgreSQL 和查询 SELECT FROM my table WHERE my field 0 15 不返回包含以下值的行my field is 0 15 但例如查询 SELECT FROM m