2011-01-12 61 views
1

简单明了,没有任何人知道为什么会这样:SQL Server 2000的整数截断

Select 30 * 220/30 

返回,这是正确的结果,而这一点:

Select 30 * (220/30) 

返回 ???

在第二种情况下,我意识到220/30首先被计算,产生一个小数(7,333333 ...),但仍...这不是这种糟糕的精度?

回答

4

在整数除法220/30 = 799/100 = 0(注意截断不四舍五入)

使用非整数避免这种情况。例如Select 30 * (220/30.0)

或者你可以用括号明确cast

Select 30 * (220/cast (30 as float)) 
1

的一个,总是先进行计算,但由于机器逻辑使用的是整数,在这种情况下,分割的结果是7,你乘以30,给你210