2017-09-14 36 views

回答

3

這是因爲地板的回報相同的數據類型輸入,這是你的情況INT。添加一些小數點,它會解決它。

SELECT FLOOR(21474837.00 * 100)  

最大INT號碼是2147483647和21474837 * 100 = 2147483700,這是53太多

+0

是不是根本問題是如何處理乘法和類型推斷? 即使你沒有調用'Floor',它也不會有同樣的錯誤嗎? –

+0

是的,如果您沒有調用floor並且未使用多個或分子/分母上的小數進行隱式轉換,那麼會發生這種情況。但問題是關於樓層,所以我在樓上指定了我的答案。我在底部添加了一個關於此的金塊 – scsimon

+0

我想我的觀點是,解釋爲什麼有一個錯誤沒有被這個答案明確描述。錯誤的原因與類型推斷和乘法行爲有關。將int乘以int將導致服務器採用int結果。對於int而言太大的常量值將導致服務器爲表示使用不同的數據類型。除以十進制將導致十進制結果。 「FLOOR」的行爲或多或少是無關緊要的。解決方案是正確的,但不是解釋。 –

相關問題