1

我收到错误

将表达式转换为数据类型浮点数的算术溢出错误

在以下代码上:

SELECT b.[CUSIP NUMBER],
   b.[PASS THRU RATE],
   a.[CURRENT BALANCE],
   b.[ORIGINAL WA MATURITY],
   b.[CURRENT WA MATURITY],
   (b.[ORIGINAL BALANCE] * ((b.[PASS THRU RATE]*.01)/12))/ (1-((1 + power (( (b.[PASS THRU RATE]*.01 )/ 12), -b.[ORIGINAL WA MATURITY] ) )))

   FROM DBO.mbs012013 a, DBO.mbs022013 b
   WHERE a.[CUSIP NUMBER] = b.[CUSIP NUMBER]

我没有将数字指定为任何特定类型,所以我不确定为什么会收到此错误。如果有人能告诉我如何解决这个问题,将不胜感激。

供参考:cusip number 是一个序列号,其余是输入(利率、银行余额、到期月份等)

4

2 回答 2

2

你说PASS THRU RATE可以1-10ORIGINAL WA MATURITY之间0 - 360

对你来说最糟糕的情况是PASS THRU RATE= 1 和ORIGINAL WA MATURITY= 360

在那种情况下,你会做

SELECT POWER(0.0008333333333, -360)

结果是3.2E+1108. SQL Server 中没有数据类型的范围大于float并且“仅”允许范围为± 1.79E+308.

如果您需要进行这些计算,那么它们将需要在 TSQL 之外完成。但是您确定您的公式实际上是正确的吗?

它不应该是其中之一吗?

SELECT POWER(1 + 0.0008333333333, -360)

SELECT POWER(1 - 0.0008333333333, -360)
于 2013-06-21T17:54:59.090 回答
0

问题大概出在这里:

power (( (b.[PASS THRU RATE]*.01 )/ 12), -b.[ORIGINAL WA MATURITY] )

如果b.[PASS THRU RATE]是小而-b.[ORIGINAL WA MATURITY]大,您最终可能会得到比NUMERIC类型可以容纳的更大的结果。尝试将它们转换为浮点数:

power (( CAST(b.[PASS THRU RATE]*.01 / 12) AS FLOAT), -b.[ORIGINAL WA MATURITY] ) )))
于 2013-06-20T18:41:54.113 回答