处理债券分析。我试图制作一个复制excel的PMT功能的支付功能。对于债券,“Cusip”是他们的标识符,他们的“PASS THRU RATE”是他们的年利率,“ORIGINAL WA MATURITY”是期间的总数,而“ORIGINAL BALANCE”是这些债券的原始面值键。将表达式转换为数据类型的算术溢出错误float
供纸计算,每月支付的公式为:
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
我有一个表需要此功能的所有列,以及我会尝试使用这种不同月份不同的表对于。这是我到目前为止,创建功能,并试图修复数据类型:
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([email protected],@periods)-1)
* (@rate*power([email protected],@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(@[email protected],@WK_periods)))
/(power(@[email protected],@WK_periods)[email protected]_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.
当我尝试执行它。我无法弄清楚是什么原因造成的。任何帮助将是伟大的!
你应该说明你使用的编程语言来获得更好的支持。不仅SQL ...所以,请通过添加额外的一个或几个更改标记... –
Sql-server 2008,sql,ddl – user2501627