为什么SQL Server会抛出算术溢出错误将int转换为数据类型numeric?

时间:2010-01-13 18:18:07

标签: sql-server variables types numeric

运行此代码时, SQL Server Management Studio 引发了错误:

declare @percentage numeric(3,2)
set @percentage = cast(15 as numeric(3,2))

但是当我将数字声明更改为

declare @percentage numeric(4,2)
set @percentage = cast(15 as numeric(4,2))
一切都很顺利。

数字数据类型是否有限制?

4 个答案:

答案 0 :(得分:120)

数字定义TOTAL位数,然后定义小数点后的数字。

数字(3,2)最多只能容纳9.99。

答案 1 :(得分:27)

让我们看看,数字(3,2)。这意味着您有3个数据位置,其中两个位于小数点右侧,只留下小数点左侧的一个。 15在小数点左边有两个位置。顺便说一下,如果你有100作为一个值,我会把它增加到数字(5,2)

答案 2 :(得分:17)

NUMERIC(3,2)表示:总共3位,小数点后2位。所以你在小数点前只有一个小数。

尝试NUMERIC(5,2) - 前三个,小数点后两个。

答案 3 :(得分:16)

精确度和规模经常被误解。在数字(3,2)中,您需要3位数字,但小数点右边2位。如果你想要15 => 15.00所以前导1导致溢出(因为如果你想要小数点右边的2位数,左边只有一个数字的空间)。有了4,2,没有问题,因为所有4位都适合。