我正在编写一个存储过程,在我的SQL代码中,分母中有一个值为约。 e ^ -33然后SQL将其四舍五入为零,这导致Stored Proc抛出的dividebyzero错误。我使用数据类型为十进制(38,10)。请提供应该用于获取确切值的数据类型? SQL可以存储这么小的值吗?
答案 0 :(得分:1)
使用DECIMAL
时,无法存储低数字的EXACT值。您必须使用代表约的FLOAT
。值。
如果使用float,则应该没有“除以零”错误。如果我在SQL-Server中运行以下示例代码:
DECLARE @var FLOAT;
DECLARE @var2 FLOAT;
SET @var = POWER(CAST(2.71828 AS FLOAT),-100);
SET @var2 = POWER(CAST(2.71828 AS FLOAT),-2);
Select @var/@var2
......结果将是2,74896621369795E-43。无法存储低于DECIMAL
的精确值的值。
如果您只是想处理“除以零”错误,您可以执行以下操作:
DECLARE @var DECIMAL(38,35);
DECLARE @var2 DECIMAL(38,35);
SET @var = 5.0;
SET @var2 = 0.0;
Select ISNULL(@var / NULLIF(@var2,0.0),0.0)
如果两个表达式(NULLIF
和NULL
)相等,则 @var2
会返回0.0
。周围的ISNULL
检查表达式(NULLIF(...)
)是否等于NULL
,如果是,它将返回0.0作为NULL
的替代。因此SELECT
显示0.000000作为结果