问题:PostgreSQL round(v numeric, s int)

Postgresround(v numeric, s int)使用哪种方法?

1.四舍五入

  1. 倒圆一半

  2. 离零四舍五入

  3. 向零舍入一半

5.圆一半到均匀

  1. 半轮到奇数

我正在寻找文档参考。

解答

抱歉,我在文档中没有看到任何提示,但是看一下代码表明它使用的是 round half away from zero;carry总是与digits相加,从而增加变量的绝对值,而不管它的sign是什么。一个简单的实验(psql 9.1)证实了这一点:

test=# CREATE TABLE nvals (v numeric(5,2));
CREATE TABLE
test=# INSERT INTO nvals (v) VALUES (-0.25), (-0.15), (-0.05), (0.05), (0.15), (0.25);
INSERT 0 6
test=# SELECT v, round(v, 1) FROM nvals;
   v   | round 
-------+-------
 -0.25 |  -0.3
 -0.15 |  -0.2
 -0.05 |  -0.1
  0.05 |   0.1
  0.15 |   0.2
  0.25 |   0.3
(6 rows)

有趣,因为round(v dp)使用了 half even:

test=# create table vals (v double precision);
CREATE TABLE
test=# insert into vals (v) VALUES (-2.5), (-1.5), (-0.5), (0.5), (1.5), (2.5);
INSERT 0 6
test=# select v, round(v) from vals;
  v   | round 
------+-------
 -2.5 |    -2
 -1.5 |    -2
 -0.5 |    -0
  0.5 |     0
  1.5 |     2
  2.5 |     2
(6 rows)

后一种行为几乎可以肯定是平台相关的,因为它看起来像它在引擎盖下使用 rint(3)。

如有必要,您始终可以实施不同的舍入方案。有关示例,请参见Tometzky 的答案。

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐