如何在postgresql中正常工作?

时间:2018-04-17 13:44:52

标签: postgresql

postgresql中的round函数实际上是如何工作的? 下面的查询演示了奇怪的行为

SQL DEMO

select
    val
    ,Round(x.val::NUMERIC) as NUMERIC_Round
    ,Round(x.val::DOUBLE PRECISION) as DOUBLE_Round
from
    generate_series(-10.5,10.5,0.5) as x(val)

Val采取' 10.5',' 6.5',' 4.5'圆的结果是不同的。

Docs这样说 双精度:

 round(dp or numeric)   (same as input) round to nearest integer

表示数字:

round(v numeric, s int) numeric round to s decimal places

这并不能解释为什么' 10.5' 6.5',' 4.5'是不同的。 我究竟做错了什么? 可能有一些详细的解释可以帮助理解圆函数。

1 个答案:

答案 0 :(得分:2)

文档中的

This page表示不同数据类型之间的舍入差异:

  

类型decimalnumeric是等效的。这两种类型都是SQL标准的一部分。

     

对值进行舍入时,numeric类型的舍入值与零相关,而(在大多数计算机上)realdouble precision类型舍入到最近的偶数。例如:

SELECT x,
    round(x::numeric) AS num_round,
    round(x::double precision) AS dbl_round
FROM generate_series(-3.5, 3.5, 1) as x;

  x   | num_round | dbl_round
------+-----------+-----------
 -3.5 |        -4 |        -4
 -2.5 |        -3 |        -2
 -1.5 |        -2 |        -2
 -0.5 |        -1 |        -0
  0.5 |         1 |         0
  1.5 |         2 |         2
  2.5 |         3 |         2
  3.5 |         4 |         4
(8 rows)

pgsql-hackers邮件列表上有关于更改here的讨论。