相关疑难解决方法(0)

十进制(10,9)变量不能保持数字50(SQL Server 2008)

这个很简单.为什么下面的代码导致下面的错误?

declare @dTest decimal(10, 9)
set @dTest = 50
Run Code Online (Sandbox Code Playgroud)

错误:

Msg 8115, Level 16, State 8, Line 3
Arithmetic overflow error converting int to data type numeric.
Run Code Online (Sandbox Code Playgroud)

根据MSDN文档decimal(p, s),p(在我的情况或10)是"的可存储的,小数位最大总数二者的左侧和小数点的右边,而" s(或在我的情况9)被" 可以存储在小数点右侧最大小数位数".

我的数字50,总共只有2位数(小于最大值 10位),小数点右边的0位数(小于最大值 9 位数),因此它应该有效.

我发现这个问题基本上是同一个问题,但没有人解释为什么文档似乎与行为冲突.似乎s维度实际上被解释为小数点右边的固定位数,并从p号中减去,在我的情况下,10-9 =仅剩余1位数来处理左侧.

任何人都可以提供合理的方式来解释文档,以符合行为吗?

编辑:

我在下面看到一些解释,但它们没有解决文档措辞的根本问题.我会建议改变措辞:

为"P(精度)"改变"的十进制数字的最大总数可存储"读"的那个十进制数字的最大总数被存储的".

并且对于"s(比例)"更改"可以存储在小数点右侧的最大小数位数." to" 存储在小数点右侧的小数位数.从p中减去此数字以确定小数点左侧的最大位数."

我将向Connect提交错误报告,除非有人有更好的解释.

sql-server sql-server-2008

6
推荐指数
2
解决办法
2万
查看次数

标签 统计

sql-server ×1

sql-server-2008 ×1