2012-10-30 83 views
0

这里是我运行SQL Server 2008中计算错误

Select (100/18)*18 

查询答案我得到的是90.我试图声明的每一个号码为也小数,和我得到的值100.0008,但是当我用变量作为浮点数计算答案在'100'是正确的,所以任何人都不知道SQL为什么会这样计算?

+1

[运算符优先级(HTTP ://msdn.microsoft.com/en-us/library/ms190276.aspx)永远不要以为RDBMS有bug。 – JeffO

回答

7

,因为它首先evelute的paranthesis

所以

Select (100/18)*18 

会(一十八分之一百)= 5.555555,但假设这两个数为INT所以它会施放结果为INT所以它会返回5

所以现在5*18 = 90

如果你想正确的结果做到这一点,而不是Select (100*18)/18

0

你可以试试这个

select abs(18*100/18) 
+0

虽然可能不需要ABS,但由于默认优先级(M,D,A,S),所以可以使用。为什么是负面投票? – JeffO

+0

abs可能不需要,但是当数据改变时。这是必需的。根据这个问题,答案是正确的 – SRIRAM

1

试图表达的numders交流十进制数

SELECT (100.0/18)*18 

SELECT ROUND((100.0/18)*18,2) 

...

2

,以获得期望的结果你应该尝试这样的事情:

Select CEILING((100/18.0)*18) 
当你做到这一点

Select (100/18)*18 

的SQL Server考虑操作整数除法,并采取选择十八分之百5 instaed 5.55555的....