Работа над анализом облигаций. Я попытался сделать функцию платежа, которая реплицирует функцию PMT для excel. Для облигаций «Cusip» является их идентификатором, их «PASS THRU RATE» является их годовой процентной ставкой, «ОРИГИНАЛЬНАЯ МАТЕМАТИКА WA» - это общее количество периодов, а «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