SQL Server 2000 整数截断
简单明了,有人知道为什么这个:
Select 30 * 220 / 30
返回220,这是正确的结果,而这个:
Select 30 * (220/30)
返回210???
在第二种情况下,我意识到首先计算 220/30,生成小数(7,333333...),但仍然...这不是很糟糕的精度吗?
Plain and simple, does anybody know why this:
Select 30 * 220 / 30
Returns 220, which is the correct result, and this:
Select 30 * (220/30)
Returns 210???
On the second case, I realise that 220/30 is being calculated first, generating a decimal (7,333333...) but still... isn't this lousy precision?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在整数除法
220/30 = 7
和99/100 = 0
(注意截断而不是舍入)下使用非整数来避免这种情况。例如
Select 30 * (220/30.0)
或者您可以使用显式
cast
Under integer division
220/30 = 7
and99/100 = 0
(note truncation not rounding)Use non integers to avoid this. e.g.
Select 30 * (220/30.0)
Or you can use an explicit
cast
括号中的值总是首先计算,但由于您使用整数的机器逻辑,在这种情况下,除法的结果是 7,您乘以 30,得到 210
The one in the parentheses, is always evaluated first, but since the machine logic you are using integer, in that case, the result of the division is 7, wich you multiply by 30, gives you 210