我遇到错误:
将数字转换为数据类型数字的算术溢出错误 在下面的代码上。
declare @A as nvarchar(100) --will be Nvarchar only
declare @T as nvarchar(100) --will be Nvarchar only
declare @Act as nvarchar(100) --will be Nvarchar only
set @A ='750000'
set @T ='552000'
SELECT @Act = cast(cast(cast(@A AS decimal(10, 4)) -cast( @T AS decimal(10, 4))
/cast(@T AS decimal(10, 4)) AS decimal(10, 4)) * 100 AS numeric(10, 4))
如何克服这个错误?
答案 0 :(得分:1)
首先,为什么要使用错误的数据类型并使您的工作变得困难,所以应该始终使用正确的数据类型。
因此,为什么不使用VARCHAR
而不是DECIMAL
,这仍然是查询,因为您的问题是如何解决此错误
declare @A as nvarchar(100) --will be Nvarchar only
declare @T as nvarchar(100) --will be Nvarchar only
declare @Act as nvarchar(100) --will be Nvarchar only
set @A ='750000'
set @T ='552000'
SELECT @Act = CAST(
(
CAST(@A AS DECIMAL(10,4))-
CAST(@T AS DECIMAL(10,4))
) /
(CAST(@T AS DECIMAL(10,4)) * 100)
AS VARCHAR);
SELECT @Act
无需强制转换AS numeric(10, 4)
,而您需要强制转换为VARCHAR
,因为您是将值分配给varchar变量,而不是数字变量。
如果您更改数据类型,您的查询将很容易,例如:
DECLARE @A DECIMAL(10,4) = 750000,
@T DECIMAL(10,4) = 552000,
@Act VARCHAR(100);
SELECT @Act = CAST((@A - @T) / (@T * 100) AS VARCHAR(100))
SELECT @Act
或者如果您要将结果强制转换为numeric(10, 4)
DECLARE @A DECIMAL(10,4) = 750000,
@T DECIMAL(10,4) = 552000,
@Act VARCHAR(100);
SELECT @Act = CAST(CAST((@A - @T) / (@T * 100) AS numeric(10, 4)) AS VARCHAR(100))
SELECT @Act
答案 1 :(得分:0)
您需要提高精度值。 尝试这样更改:
declare @A as nvarchar(100) --will be Nvarchar only
declare @T as nvarchar(100) --will be Nvarchar only
declare @Act as nvarchar(100) --will be Nvarchar only
set @A ='750000'
set @T ='552000'
SELECT @Act = cast(cast(cast(@A AS decimal(18, 2)) -cast( @T AS decimal(18, 4))
/cast(@T AS decimal(18, 4)) AS decimal(18, 4)) * 100 AS numeric(18, 4))
print @Act
答案 2 :(得分:0)
出现错误是因为
您提供的电话号码的总长度大于10。
您可以将下面的代码item.addEventListener('click', throttled(2000, (e) => func(e.target)));
更改为10, 4
。
18, 4
它的值大于最大限制,所以它给出了异常。
答案 3 :(得分:0)
如果我正确理解了您的逻辑,那么您想做什么:
SELECT @Act =
cast(
cast(
cast(@A AS decimal(10, 4)) -
cast(@T AS decimal(10, 4)) / cast(@T AS decimal(10, 4))
AS decimal(10, 4))
* 100
AS numeric(10, 4))
是这个简单的计算:
SELECT @Act = (@N1 - @N2/@N2) * 100
然后,根据您的情况,您需要将@Act
强制转换为numeric(12, 4)
,因为您乘以100。结果将是:74999900.0000
。
我不确定,但是我认为您可能要计算:
SELECT @Act = (@N1 - @N2)/@N2 * 100
即使这样,通常也要始终考虑数学计算的范围,并为变量使用适当的数字数据类型。