【问题标题】:Loss of precision casting result of SQL Server EXP to numericSQL Server EXP 到数字的精确转换结果丢失
【发布时间】:2014-09-03 18:32:58
【问题描述】:

我有这个 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 之后失去了精度?

提前致谢。

【问题讨论】:

    标签: c# sql sql-server tsql math


    【解决方案1】:

    这是使用 EXP() 函数将浮点值转换回小数的情况;在 SQL Server 中,最大精度限制为 17:

    来自 MSDN:

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

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

    【讨论】:

    • 感谢大家的帮助。
    【解决方案2】:

    恐怕你运气不好。由于从浮点数(这是 EXP() 返回的)转换为数字的方式,您将始终得到舍入。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      相关资源
      最近更新 更多