首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >圆函数与算术溢出

圆函数与算术溢出
EN

Stack Overflow用户
提问于 2015-11-20 20:42:56
回答 2查看 3.3K关注 0票数 3

在MS SQL Server中,如果我

代码语言:javascript
复制
SELECT ROUND(9.4, 0), ROUND(8.6, 0), ROUND(10.6, 0)

我毫不奇怪地得到:

代码语言:javascript
复制
9.0 9.0 11.0

但如果我做了

代码语言:javascript
复制
SELECT ROUND(9.6, 0)

我得到:

Msg 8115,级别16,状态2,第1行算术溢出错误,将表达式转换为数据类型数值。

我知道我可以CAST(9.6 as DECIMAL(10,0)),但这是怎么回事?

提亚

EN

回答 2

Stack Overflow用户

发布于 2015-11-20 20:49:59

SQL接受第一个参数作为数据类型,在本例中是DECIMAL(2,1)。预期的结果,即10.0,应该是DECIMAL(3,1)类型的,这就是您获得错误的原因。

尝试:

代码语言:javascript
复制
SELECT ROUND(cast(9.6 as decimal(2,1)), 0)

然后试着:

代码语言:javascript
复制
SELECT ROUND(cast(9.6 as decimal(3,1)), 0)
票数 6
EN

Stack Overflow用户

发布于 2015-11-20 20:50:24

当你从9.6,它需要一个额外的数字存储数字。对于文字十进制值,在执行循环操作之前,必须将其转换为更宽的值。您可能期望此值被视为浮点值。如果您尝试round(9.6e, 0),您将看到一个不同的行为。

sql_variant_property一起玩以了解更多细节。显然,ceiling()floor()没有同样的问题(可能是因为它们只输出整数和零尺度小数?)。这两个函数似乎保持了相同的精度,但将标度降到了零,这就为潜在的新地方留下了足够的空间。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33835741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档