我知道问题是重复的,但我无法在下面找到解决问题的方法:
SELECT
CAST(747448809352908.49434500000 AS Decimal(25,12)) AS [Value]
这是我从我的一项计算得到的价值。我试图插入一个具有值为Decimal(25,12)的值列的表。使用上面的值我得到溢出错误。
请协助。 问题是我无法更新列的设置。因此,我需要适应列。
我不能吗?
答案 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,那么您将得到一些答案。所以尽量减少数量。