1

我想使用 POWER 函数计算负数的第三个根(在 SQL Server 2019 中)

SELECT POWER(-8.000, 1.000 / 3)

但我不断收到此错误:

发生了无效的浮点运算。

它适用于正数。

任何想法这里有什么问题?

4

2 回答 2

3

我没有解释为什么你的立方根调用POWER不起作用。但是,假设输入是负数 ( -8),输出应该等于正输入的立方根的负数:

SELECT -1.0*POWER(8.000, 1.000 / 3) AS output;

-2.000按预期输出。您甚至可以编写更通用的逻辑来解决此问题:

SELECT
    CASE WHEN input > 0 THEN POWER(input, 1.000 / 3)
         ELSE -1.0*POWER(-1.0*input, 1.000 / 3) END AS output
FROM yourTable;
于 2020-03-18T09:31:03.193 回答
1

您的计算不起作用的原因是:

(-8)^(1/3)              --> an integer, -2
(-8)^(0.33333333333333) --> a complex number

也就是说,浮点值是不精确的,不能代表三分之一。并且该值必须恰好是1/3 才能使该值成为浮点数。

如果您知道该值可以表示为浮点值,则可以使用:

sign(-8) * power(abs(-8), 1.0 / 3)

注意:这不适用于所有情况。琐碎:

sign(-4) * power(abs(-4), 1.0 / 2)

将返回 -2,这不是正确答案。

于 2020-03-18T11:33:21.763 回答