我们需要Round Half-UP以下NUMBER:
28.854623
Run Code Online (Sandbox Code Playgroud)
所以,'预期'的步骤是:
1) 28.854623
2) 28.85462
3) 28.8546
4) 28.855
5) 28.86
Run Code Online (Sandbox Code Playgroud)
但是,ROUND函数的结果似乎是错误的:
SELECT ROUND(28.854623, 2) FROM DUAL;
Result> 28.85
Run Code Online (Sandbox Code Playgroud)
如果我们以3位小数位执行,结果如预期:
SELECT ROUND(28.854623, 3) FROM DUAL;
Result> 28.855
Run Code Online (Sandbox Code Playgroud)
如果我们ROUND到3个地方,然后到2个地方,结果也是预期的:
SELECT ROUND (ROUND (28.854623, 3), 2) FROM DUAL
Result> 28.86
Run Code Online (Sandbox Code Playgroud)
有谁能解释我为什么会这样做?是不是ROUND函数在(N + 1)十进制位置上产生TRUNC,然后,舍入结果,如下所示:
ROUND(TRUNC(VALUE, N+1), N)
Run Code Online (Sandbox Code Playgroud)
谢谢!
我见过的没有舍入函数会从最后一个小数开始,然后像那样向后工作.舍入函数将看起来超过所需的十进制计数1个字符(如果找到的第一个字符是5 MT0,则可能会进一步说明如果下一个字符为5,则Oracle从0开始舍入).
在你的例子中,ROUND(28.854623, 2)会看到28.854并说'向下'.行为就像我期望的那样.
如果你想要一个像你所描述的那样循环的函数,你可能需要自己实现一个.
| 归档时间: |
|
| 查看次数: |
654 次 |
| 最近记录: |