数学函数对数字表达式进行数学运算并返回运算结果。数学函数可对 Microsoft® SQL Server™ 系统提供的数字数据(decimal、integer、float、real、money、smallmoney、smallint 和 tinyint)进行处理。默认情况下,对 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 ARITHABORT、SET ANSI_WARNINGS 和 SET ARITHIGNORE。
如果使用 money 或 numeric 数据类型,那么,转换为 float 的内部转换可能会降低精度。