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

Jun*_*r M 66 sql-server variables types numeric

运行此代码时,SQL Server Management Studio会抛出一个错误:

declare @percentage numeric(3,2)
set @percentage = cast(15 as numeric(3,2))
Run Code Online (Sandbox Code Playgroud)

但当我将数字声明更改为

declare @percentage numeric(4,2)
set @percentage = cast(15 as numeric(4,2))
Run Code Online (Sandbox Code Playgroud)

一切顺利.

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

Joe*_*Joe 128

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

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


HLG*_*GEM 27

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


mar*_*c_s 18

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

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


Aar*_*and 16

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