SQL Server EXP的精度强制转换结果为数值时丢失

本文关键字:结果 转换 EXP Server 精度 SQL | 更新日期: 2023-09-27 18:20:36

我有这个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.00000000000000090000000000000

你知道为什么它在9号之后失去了精度吗?

提前谢谢。

SQL Server EXP的精度强制转换结果为数值时丢失

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

来自MSDN:

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

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

恐怕你运气不好。由于从float(EXP()返回的值)到numeric的转换方式,您总是会得到舍入。

发件人http://msdn.microsoft.com/en-us/library/ms187928.aspx:

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