我既不是数学专家也不是SQL专家(Microsoft SQL Server 2017),所以我不知道为什么会这样。
所以我的查询是((1000000000*0.00002 * POWER(10, (82.6 / 20))) / 1000000000) AS FJS
现在由于某种原因,结果为 0.2697800000000000 或 0.26978 ,但是当我将完全相同的查询放入计算器或Google时,结果为 0.26979257651 我在Google中投入的金额是
(1000000000*0.00002*(10^(82.6/20)))/1000000000
或
任何帮助或建议将不胜感激。
答案 0 :(得分:4)
问题在于POWER(10, (82.6 / 20))
的结果是13489
,与精确值相差很远。这是因为POWER
返回其输入的类型,在这种情况下为INT
。这不是特别有用,但是 documented [1] 。
解决方法是使第一个参数为FLOAT
,这也使表达式的其余部分也保持一致。最简单的方法是使用e
,所以:
SELECT ((1000000000*0.00002 * POWER(10e, (82.6 / 20))) / 1000000000)
给出0.269792576518331
。如果您愿意,CAST(10 AS FLOAT)
也可以。使用10.0
不会 这样做,因为此文字的类型为DECIMAL(3,1)
,而POWER(10.0, (82.6/20))
是13489.6
,这并不比我们做的好开始。
[1]:但是,如果输入类型为:在我的测试中,传递任何精度的DECIMAL(2,0)
会导致输入错误,则文档说输出类型为DECIMAL
时是错误的。 DECIMAL
的精度为38,而不是原始精度。还有其他异常。我已提交拉动请求以更正此问题。