我必须计算这个
select power((1+(100000/365)),365)-1 from dual
但无论我改变了什么,总会得到数字溢出。
我尝试使用pls_integer, cast,
来舍入结果。
请帮帮我
答案 0 :(得分:0)
公式是根据每日复合率计算利息。 (我假设这是兴趣 - 它可能同样是人口增长或其他东西)。
因此统一费率为100,000,相当于10,000,000%。将其除以365得到每日费率(约27,000%),然后幂函数会导致复合利息被应用。
但是你的初始利率是如此巨大,以至于任何复合增长都必然会在短时间内爆炸;每天27,000%是很多。
在这种情况下,答案是大约10 ^ 890,如果我的计算器正确地为我服务。
因此,简而言之,您的公式是正确的。你的参数错了。
答案 1 :(得分:0)
舍入返回的值将无济于事,因为在将值返回给您之前(在幂函数内部)会发生错误。因此,除非您减少操作数,否则您将无法摆脱它。
power(((1+(100000/365)),365)达到无穷大。幂函数中使用的变量不能处理这个更大的值。
以下版本显示了它如何达到无穷大。作为脚本运行。
SET SERVEROUTPUT ON
WITH FUNCTION to_power(A VARCHAR2,b VARCHAR2) RETURN varchar2 IS
pow VARCHAR2(32767):=1;
BEGIN
dbms_output.put_line('START..');
-----------------------------------------------------------
FOR I IN 1 .. ABS(b)
LOOP
dbms_output.put_line('IN ABS LOOP '||I);
pow:=A*pow;
IF pow='~' THEN
dbms_output.put_line('REACHED INFINITE..');
EXIT;
END IF;
END LOOP;
-----------------------------------------------------------
IF b < 0 THEN
dbms_output.put_line('FOUND NEGATIVE');
IF pow='~' THEN
dbms_output.put_line('WILL NOT DEVIDE 1 BY INFINITE, HENCE RETURNING 0');
RETURN 0;
END IF;
BEGIN
dbms_output.put_line('BEFORE DEVIDE');
RETURN 1/pow;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('ERROR OCCURED IN NEGATIVE DEVIDE');
RETURN 0;
END;
dbms_output.put_line('END OF NEGATIVE PROCESSING');
ELSE
dbms_output.put_line('RETURNING + VALUE');
RETURN pow;
END IF;
----------------------------------------------------------
END;
-------------------------------------
SELECT to_power(274,365) FROM dual