对不起,我在文档中没有看到任何暗示,但是
a look at the code表示它使用的是距离零的一半;随身携带始终添加到数字中,从而增加变量的绝对值,无论其符号是什么.一个简单的实验(psql 9.1)证实了这一点:
原文链接:https://www.f2er.com/postgresql/238878.htmltest=# 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)使用了一半的偶数:
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)
后一种行为几乎肯定是依赖于平台的,因为它看起来像it uses rint(3) under the hood.
如有必要,您可以随时实施不同的舍入方案.有关示例,请参见Tometzky’s answer.