我对 POWER/LOG 的问题是,尽管它们似乎适应了您发送的数据类型(输出变量类型与第一个变量的类型匹配),但精度似乎停止接近浮点数的限制,导致输出不正确。例子:
DECLARE @ten numeric(18,4) = 10
declare @num numeric(18,4) = 234567890
SELECT power(@ten,log(@num,@ten))
输出 = 234567890.0000 这是正确的
但是,如果我们提高精度,如下:
DECLARE @ten numeric(18,6) = 10
declare @num numeric(18,6) = 234567890
SELECT power(@ten,log(@num,@ten))
输出 = 234567889.999999 这是不正确的,但四舍五入可以解决它(?)
最后,如果将精度更改为 Numeric(18,9) 之类的值,问题会变得更糟:
DECLARE @ten numeric(18,9) = 10
declare @num numeric(18,9) = 234567890
SELECT power(@ten,log(@num,@ten))
输出 = 234567889.999999310 这是不正确的,四舍五入无法解决它。
我假设问题是虽然 POWER 和 Log 函数可以接受非常精确的数据类型,但它们的工作变量必须是浮点类型吗?有没有人有这方面的经验,或者有解决它的经验?