SQL Server 2000的整数截断
问题描述:
简单明了,没有任何人知道为什么会这样:SQL Server 2000的整数截断
Select 30 * 220/30
返回,这是正确的结果,而这一点:
Select 30 * (220/30)
返回 ???
在第二种情况下,我意识到220/30首先被计算,产生一个小数(7,333333 ...),但仍...这不是这种糟糕的精度?
答
在整数除法220/30 = 7
和99/100 = 0
(注意截断不四舍五入)
使用非整数避免这种情况。例如Select 30 * (220/30.0)
或者你可以用括号明确cast
Select 30 * (220/cast (30 as float))
答
的一个,总是先进行计算,但由于机器逻辑使用的是整数,在这种情况下,分割的结果是7,你乘以30,给你210