Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 圆函数与算术溢出_Sql_Sql Server_Rounding - Fatal编程技术网

Sql 圆函数与算术溢出

Sql 圆函数与算术溢出,sql,sql-server,rounding,Sql,Sql Server,Rounding,在MS SQL Server中,如果 SELECT ROUND(9.4, 0), ROUND(8.6, 0), ROUND(10.6, 0) 我毫不奇怪地得到: 9.0 9.0 11.0 但如果我这样做了 SELECT ROUND(9.6, 0) 我得到: Msg 8115,16级,状态2,第1行 将表达式转换为数据类型numeric时出现算术溢出错误 我知道我可以将9.6转换为十进制(10,0)),但这里发生了什么 TIASQL将第一个参数作为数据类型,在本例中为十进制(2,1)。预期结

在MS SQL Server中,如果

SELECT ROUND(9.4, 0), ROUND(8.6, 0), ROUND(10.6, 0)
我毫不奇怪地得到:

9.0 9.0 11.0
但如果我这样做了

SELECT ROUND(9.6, 0)
我得到:

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

我知道我可以将9.6转换为十进制(10,0)),但这里发生了什么


TIA

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

尝试:

然后尝试:

SELECT ROUND(cast(9.6 as decimal(3,1)), 0)

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

尝试:

然后尝试:

SELECT ROUND(cast(9.6 as decimal(3,1)), 0)

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


使用
sql\u variant\u属性
查看更多详细信息。显然
天花()
floor()
没有相同的问题(可能是因为它们只输出整数和零小数?)。这两个函数似乎保持相同的精度,但将刻度向上滑动到零,这总是为潜在的新位置留出足够的空间。

从9.6取整时,需要额外的数字来存储数字。对于文字十进制值,在执行舍入操作之前,必须转换为更宽的值。您可能希望将其视为浮点值。如果您尝试
round(9.6e,0)
您将看到不同的行为


使用
sql\u variant\u属性
查看更多详细信息。显然
天花()
floor()
没有相同的问题(可能是因为它们只输出整数和零小数?)。这两个函数似乎保持相同的精度,但将刻度向上滑动到零,这总是为潜在的新位置留出足够的空间。

它从1位舍入到10位,并溢出,因为它现在有太多的有效数字要保留。在四舍五入之前,您需要将文本强制转换为所需的类型。它从1位四舍五入到10位并溢出,因为它现在有太多的有效数字要保留。在舍入之前,您需要将文字强制转换为所需的类型。酷。。。所以
selectround(10.6,0)
应该有效,而
selectround(9.6)
不会,但是
selectround(10.6,0),round(9.6,0)
会有效!暗示10.6的顺序允许9.6,0工作!您将看到
selectround(99.6,0)
Cool。。。所以
selectround(10.6,0)
应该有效,而
selectround(9.6)
不会,但是
selectround(10.6,0),round(9.6,0)
会有效!暗示10.6的顺序允许9.6,0工作!您将看到
select round(99.6,0)