SQL Server 2000 整数截断

发布于 2024-10-11 20:11:12 字数 262 浏览 3 评论 0原文

简单明了,有人知道为什么这个:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

相思碎 2024-10-18 20:11:12

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

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

或者您可以使用显式cast

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

Under integer division 220/30 = 7 and 99/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

Select 30 * (220/cast (30 as float))
夏至、离别 2024-10-18 20:11:12

括号中的值总是首先计算,但由于您使用整数的机器逻辑,在这种情况下,除法的结果是 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文