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号之后失去了精度吗?
提前谢谢。
这是使用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发至零。"