我的表格中有以下内容:

create table example (

     col_a int4,
     col_b int4,
     average_col = numeric


)

col_a = 309
col_b = 16

309 / 16 = 19.3125

当我做以下操作时,我只得到19.不是(19.0,或19.3125,19.3):

TRUNC((col_a/col_b),1) = 19

我做错了什么?

推荐答案

积分、浮点数和数字的存储方式不同,它们的数学也不同.这是计算机的一个基本问题,计算机不像我们那样做数学.因为您正在进行整除,Postgs只进行整除.309/16等于19.

您需要至少一个integer转换为数字(不是float,带有第二个参数的trunc取数字),然后除.

select trunc(309::numeric/16,1)

Demonstration

Postgresql相关问答推荐

如何在postquist中修剪第一/后文件名

在postgres中查找多个表中不同列的计数和总和

无法从Docker迁移Golang上的两个不同服务到一个数据库'

使用函数返回值作为另一个函数的参数

从数据集中提取彼此喜欢的用户(&Q;)

PostgreSQL无效语法

PostGresql :正则表达式 Select 其中只有一个正斜杠的行

postgres hierarchy - 用祖先的值填充缺失值

连接到 PostgreSQL 时没有属性执行错误

是否可以短时间运行 VACUUM FULL 并获得一些好处?

Windows上的psql:错误:编码UTF8的字节序列无效:0xc8 0x20

将 Postgres 与 Grails 一起使用

获取带有时区偏移的日期

LAG 函数和 GROUP BY

返回 NULL 的空数组的 array_length()

错误:CASE types character varying and numeric cannot be matched

如何为查询执行设置语句超时

如何在 plpgsql 中使用记录类型变量?

将数据推送到 Heroku 时出错:time zone displacement out of range

查询 JSON 列中的数组元素