SQL中用于存储非常高的负指数值的数据类型是什么?

时间:2016-02-02 17:35:51

标签: sql sql-server

我正在编写一个存储过程,在我的SQL代码中,分母中有一个值为约。 e ^ -33然后SQL将其四舍五入为零,这导致Stored Proc抛出的dividebyzero错误。我使用数据类型为十进制(38,10)。请提供应该用于获取确切值的数据类型? SQL可以存储这么小的值吗?

1 个答案:

答案 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)
如果两个表达式(NULLIFNULL)相等,则

@var2会返回0.0。周围的ISNULL检查表达式(NULLIF(...))是否等于NULL,如果是,它将返回0.0作为NULL的替代。因此SELECT显示0.000000作为结果