算术溢出错误将数字转换为数字类型为十进制数字(25,12)

时间:2015-08-18 08:41:43

标签: sql sql-server sql-server-2008 sql-server-2012

我知道问题是重复的,但我无法在下面找到解决问题的方法:

                SELECT
                CAST(747448809352908.49434500000 AS  Decimal(25,12)) AS [Value]

这是我从我的一项计算得到的价值。我试图插入一个具有值为Decimal(25,12)的值列的表。使用上面的值我得到溢出错误。

请协助。 问题是我无法更新列的设置。因此,我需要适应列。

我不能吗?

4 个答案:

答案 0 :(得分:2)

您的总价值长度与您的数据类型不匹配。你指定Decimal(25,12)但长度超过25,实际上是27

SELECT CAST('747448809352908.49434500000' AS  Decimal(27,12)) AS [Value]

在SQL Server中,十进制和数字是具有固定精度和比例的数字数据类型。

对于十进制(5,2)变量,它只能在小数点前保留三(5-2)个数字,在小数点后保存两个数字。但是,“1234”在小数点前有四位数,因此超出精度并发生错误。

如果将整数值1234分配给小数(5,2),则会出现同样的问题。 decimal and numeric

答案 1 :(得分:1)

您的号码对于decimal(25, 12)来说太大了。和我一起计算 - 小数点左边有15位数字,你的精确度是25.这25个中的12个用于小数,所以你剩下13个.13小于15 - >算术溢出。

decimal 不是浮点数。它的精度和比例是固定的 - 你定义你的数字在小数点左边有13位数,右边有12位数。这就是你必须要做的一切。一些小数为零的事实是无关紧要的 - decimal可以&#t;#34;移位"小数点随意。它已经修好了。

答案 2 :(得分:1)

tinka回答是正确的,但这里是解释

这个747448809352908.49434500000的长度是27,所以在DECIMAL中应该包含数字的最大长度,所以错误是因为你指定25,数字12是逗号49434500000之后的数字11。

答案 3 :(得分:0)

您输入的数字太大了。您可以提供此链接:https://msdn.microsoft.com/en-us/library/ms187928.aspx如果您将数字改为11以下而不是12,那么您将得到一些答案。所以尽量减少数量。