Oracle存储过程中如何进行HALFEVEN舍入(舍入为最接近的整数)我在Oracle存储过程中想对一个运算结果进行舍入(但不是四舍五入),类似Java里的BigDecimal类里的ROUNDHALFEVEN,也就是向最近的一方进行舍入,如果离两方一样,就向偶数的一方舍入.例如:(精确到小数点后第2位)0.124 (舍入后)= 0.120.126 (舍入后)= 0.130.125 (舍入后)= 0.120.115 (舍入后)= 0.12我知道Oracle有个round函数,但它好像是四舍五入的,不是我要的舍入模式.
网友回答
【答案】 查了些资料发下存储过程没有单一的一个数字函数可以满足你的要求,额,可能暂时没有
我不知道下面的这个是不是你想要的结果(将round 与 trunc 双剑合璧):
SQL> CREATE OR REPLACE PROCEDURE CHESHI
2 (I NUMBER)
3 AS
4 -- Local variables here
5 C NUMBER;
6 B NUMBER;
7 D NUMBER;
8 begin
9 ----确定舍入为两位,进行判断
10 --截断到小数点两位
11 SELECT (I - TRUNC(I))
12 INTO B
13 FROM DUAL;
14 --如果大于等于0.12
15 IF B >= 0.12 THEN
16 --如果大于等于0.126
17 IF B >= 0.126 THEN
18 SELECT TO_CHAR(ROUND(I,2))
19 INTO C
20 FROM DUAL;
21 DBMS_OUTPUT.put_line(TO_CHAR(C));
22 ELSE
23 SELECT TRUNC(I,2) -- 追问: 恩,你的思路和我的一样,需要用到round和trunc。 不过你这个代码限制得太死了,不通用,因为我不一定是固定2位,而且小数点后第一位也不一定就是1。 我自己写了一个通用的function,实现了我需要的舍入模式。其中需要判断要舍入的数的前一位是奇数还是偶数,来决定是用round还是trunc。 不过还是谢谢你的帮助。