我有这个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?之后失去精度的任何想法?
提前致谢。
答案 0 :(得分:2)
这会发生使用EXP()函数将浮点值转换回小数;在SQL服务器中限制为最大精度为17:
来自MSDN:
将使用科学记数法的浮点值转换为十进制或 numeric仅限于精度为17位的值。任何价值 精度高于17轮至零。
答案 1 :(得分:1)
你很运气,我很害怕。因为如何从float(这是EXP()返回)转换为数字,你将总是得到舍入。
来自http://msdn.microsoft.com/en-us/library/ms187928.aspx:
“将使用科学记数法的浮点值转换为十进制或 numeric仅限于精度为17位的值。任何价值 精度高于17轮至零。“