SQL Server EXP对数字的精度转换结果丢失

时间:2014-09-03 18:32:59

标签: c# sql sql-server tsql math

我有这个c#代码。

double x = 5.8856571269513607   
double result = Math.Exp(-x * x) 

结果的值为0.00000000000000090286393216423726。

我希望将其移植到T-SQL,所以我这样做了。

declare @x numeric(17,16),
        @result numeric(32,31)

set @x = 5.8856571269513607 

set @result = CAST(exp(-@x * @x) AS numeric(32,31))

@result的值为0.0000000000000009000000000000000

为什么它在9?之后失去精度的任何想法?

提前致谢。

2 个答案:

答案 0 :(得分:2)

这会发生使用EXP()函数将浮点值转换回小数;在SQL服务器中限制为最大精度为17:

来自MSDN:

  

将使用科学记数法的浮点值转换为十进制或   numeric仅限于精度为17位的值。任何价值   精度高于17轮至零。

     

http://msdn.microsoft.com/en-gb/library/ms173773.aspx

答案 1 :(得分:1)

你很运气,我很害怕。因为如何从float(这是EXP()返回)转换为数字,你将总是得到舍入。

来自http://msdn.microsoft.com/en-us/library/ms187928.aspx

  

“将使用科学记数法的浮点值转换为十进制或   numeric仅限于精度为17位的值。任何价值   精度高于17轮至零。“