为什么SQL Server抛出将int转换为数据types数值的算术溢出错误?

在运行此代码时, 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)) 

一切顺利。

数字数据types是否有限制?

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

数字(3,2)只能保存到9.99。

让我们看看,数字(3,2)。 这意味着你有三个地方的数据,其中两个是在小数的右边,只剩下一个在小数的左边。 15在小数点左边有两个地方。 顺便说一句,如果你可能有100作为一个值,我会增加到数字(5,2)

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

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

精度和规模常常被误解。 在数字(3,2)中,总共需要3位数字,但小数点的右边是2。 如果你想要15 => 15.00,所以前导1会导致溢出(因为如果你想在小数点的右边有两位数字,那么在左边只剩下一个位置再多一个数字)。 与4,2,因为所有4位数字适合没有问题。