2017-09-14 93 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”的行为或多或少是无关紧要的。解决方案是正确的,但不是解释。 –

相关问题