1

エラーが表示されます

式をデータ型 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 番号はシリアル番号で、残りは入力 (金利、銀行残高、月単位の満期など) です。

4

2 に答える 2

2

あなたはとの間でPASS THRU RATEあることができる1-10と言います。ORIGINAL WA MATURITY0 - 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 に答える