将expression式转换为数据typesfloat的算术溢出错误

对债券进行分析。 我试图做一个复制excel的PMTfunction的支付function。 对于债券,“Cusip”是他们的标识符,他们的“PASS THRU RATE”是他们的年利率,“ORIGINAL WA MATURITY”是期间的总数,“ORIGINAL BALANCE”是键。

用纸计算每月付款的等式是:

M=[OF(i(1+i)^n)]/[(1+i)^(n-1)] M=Monthly payment OF=Original Face i=annual interest rate/12 n=number of periods 

我有一个包含该函数所需的所有列的表格,以及不同月份的不同表格,我将尝试和使用它。 这是我到目前为止,创build该function,并尝试修复数据types:

 if object_id('dbo.PMT') > 0 drop function dbo.PMT go create function dbo.PMT(@rate numeric(15,9), @periods smallint, @principal numeric(20,2) ) returns numeric (38,9) as begin declare @pmt numeric (38,9) select @pmt = @principal / (power(1+@rate,@periods)-1) * (@rate*power(1+@rate,@periods)) return @pmt end go drop function dbo.PMT go create function dbo.PMT ( @rate float, @periods smallint, @principal numeric(20,2) ) returns numeric (38,9) as begin declare @pmt numeric (38,9) declare @WK_periods float, @WK_principal float, @wk_One float, @WK_power float select @WK_periods = @periods, @WK_principal = @principal, @WK_One = 1 select @pmt = round( ( @WK_principal * (@rate*power(@WK_One+@rate,@WK_periods))) / (power(@WK_One+@rate,@WK_periods)-@WK_One) ,9) return @pmt end go select ALL [CUSIP NUMBER] ,[PASS THRU RATE] ,[ORIGINAL WA MATURITY] ,[ORIGINAL BALANCE], dbo.pmt((mbs012013.[PASS THRU RATE]),mbs012013.[ORIGINAL WA MATURITY],mbs012013.[ORIGINAL BALANCE]) FROM [MBS_STATS].[dbo].[mbs012013] 

但是,我收到

 (502882 row(s) affected) Msg 8115, Level 16, State 2, Line 2 Arithmetic overflow error converting expression to data type float. 

当我试图执行它。 我无法弄清楚是什么原因造成的。 任何帮助将是伟大的!

在下面的行中,您将@WK_principal作为FLOAT ,并将@principal的值@principalNUMERIC(20,2)

 @WK_principal = @principal, 

这似乎是最可能的罪魁祸首。 我们需要能够看到您的数据,否则帮助。 另外,我还不清楚为什么你要单独创build函数,然后删除它并重新创build它。 还是你只是performance出两种不同的尝试?

Interesting Posts