我收到错误
将表达式转换为数据类型float
的算术溢出错误
以下代码:
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数字是一个序列号,其余是输入(利率,银行存款余额,以月为单位的成熟度等)
答案 0 :(得分:2)
您说PASS THRU RATE
可以是1-10
,ORIGINAL 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)
答案 1 :(得分: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] ) )))