今天因为工作需要要写一个保留小数点的方法或SQL语句,number类型的小数,如果是0.5或-0.5,打印的时候就会显示成.5或-.5,显然不是我想要的,自己就简单的写了一个,功能可以实现了,效率不高,高手们多多指教。
DECLARE
NUM1 NUMBER := 1/4; -- 要进行舍入的数字
NUM2 NUMBER; -- 中间变量
IND NUMBER; -- 小数点位置
PARAM NUMBER := 3; --精度,保留的小数位数,由于number精度限制,最大精度为38位
RESULT VARCHAR2(10000);
BEGIN
NUM2 := ROUND(NUM1, PARAM); -- 对入参数字按照精度进行四舍五入
IND := INSTR(NUM2, '.'); -- 获得‘.’的位置
RESULT := NUM2;
IF IND = 0 THEN -- 没有找到小数点,说明是整数
RESULT := RESULT || '.'; -- 在后面补个小数点
RESULT := RPAD(RESULT, LENGTH(RESULT) + PARAM, '0'); -- 按照精度对结果进行补0操作
ELSE -- 找到小数点
-- 小数的时候
IF NUM2 < 1 THEN
-- 小于1的小数,要对小于1的小数进行首位补零
IF NUM2 > 0 THEN
RESULT := '0' || NUM2;
ELSIF (-1 < NUM2 AND NUM2 < 0) THEN
RESULT := '-0' || SUBSTR(RESULT, IND);
ELSE
RESULT := NUM2;
END IF;
END IF;
IND := INSTR(RESULT, '.');
RESULT := RPAD(RESULT, IND + PARAM, '0');
END IF;
DBMS_OUTPUT.put_line(RESULT);
END;
/