使用数学函数

数学函数对数字表达式进行数学运算并返回运算结果。数学函数可对 Microsoft® SQL Server™ 系统提供的数字数据(decimalintegerfloatrealmoneysmallmoneysmallinttinyint)进行处理。默认情况下,对 float 数据类型数据的内置运算的精度为六个小数位。

默认情况下,传递到数学函数的数字将被解释为 decimal 数据类型。可用 CAST 或 CONVERT 函数将数据类型更改为其它数据类型,例如 float 类型。例如,FLOOR 函数返回值的数据类型与输入值的数据类型相同。此 SELECT 语句的输入值是 decimal 类型,FLOOR 返回值为 123,也是 decimal 值:

SELECT FLOOR(123.45)

---------------------
123

(1 row(s) affected)

但是,下面的示例使用 float 值,FLOOR 也返回 float 值:

SELECT FLOOR (CONVERT (float, 123.45))

-------------------------------------
123.000000

(1 row(s) affected)

当数学函数的 float real 结果太小而无法显示时,将发生浮点下溢错误。返回的结果为 0.0,而且不显示错误信息。例如,2 的 -100.0 次幂数学计算将得到结果 0.0。

若向数学函数提供的值不是有效值,将发生域错误。例如,为 ASIN 函数指定的值必须在 -1.00 到 1.00 之间。如果指定的范围为 –2,将发生域错误。

若指定的值超出了允许值,则发生范围错误。例如,POWER(10.0, 400) 超出了 float 数据类型的最大范围 ~2e+308,而 POWER(-10.0, 401) 超出了 float 数据类型的最小范围 ~ -2e+308。

下表显示了产生域错误或范围错误的数学函数。

数学函数 结果
SQRT(-1) 域错误。
POWER(10.0, 400) 算术溢出错误。
POWER(10.0, -400) 值 0.0(浮点下溢)。

我们可以用错误捕获的方法来处理这些函数的域错误或范围错误。您可以使用:

如果没有设置上述任何选项,执行查询后,SQL Server 将返回 NULL 并返回一个警告消息。有关更多信息,请参见 SET ARITHABORTSET ANSI_WARNINGSSET ARITHIGNORE

如果使用 money numeric 数据类型,那么,转换为 float 的内部转换可能会降低精度。