为什么SQL Server引发将int转换为数值数据类型的算术溢出错误?


73

运行以下代码时,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))

一切顺利。

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

Answers:


143

数值定义总位数,然后是小数点后的数字。

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


29

让我们看一下数字(3,2)。这意味着您有3个数据位,其中两个位在小数点右边,仅一个位在小数点左边。15在小数点左边有两个位置。顺便说一句,如果您可能有100作为值,我会将其增加为数字(5,2)


18

NUMERIC(3,2)表示:总共3位数,小数点后2位。因此,小数点前只能有一个小数。

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


17

精度和规模常常被误解。在numeric(3,2)中,您需要总共3位数字,但小数点右边为2。如果您希望15 => 15.00,那么前导1会导致溢出(因为如果您希望小数点右边有2位数字,那么左边只剩下余下一位的空间)。使用4,2不会有问题,因为所有4位数字都适合。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.