代码之家  ›  专栏  ›  技术社区  ›  Øystein Kolsrud

关于C#[重复]中的双解析

  •  2
  • Øystein Kolsrud  · 技术社区  · 7 年前

    我有以下代码:

    var d = double.Parse("4796.400000000001");
    Console.WriteLine(d.ToString("G17", CultureInfo.InvariantCulture));
    

    4796.4000000000005
    

    如果我编译成x64,我会得到:

    4796.4000000000015
    

    附加观察

    基于对double.Parse的评论,我编写了以下代码:

    var d0 = double.Parse("4796.400000000001");
    double d1 = 4796.400000000001;
    Console.WriteLine("d0: " + d0.ToString("G17", CultureInfo.InvariantCulture));
    Console.WriteLine("d1: " + d1.ToString("G17", CultureInfo.InvariantCulture));
    

    d0: 4796.4000000000005
    d1: 4796.4000000000005
    

    但当我编译为x64时得到了这个:

    d0: 4796.4000000000015
    d1: 4796.4000000000005
    

    0 回复  |  直到 7 年前
        1
  •  1
  •   Øystein Kolsrud    7 年前

    我认为这个问题的简单答案是,这是.NET Framework中的一个bug。我就这个问题提交了以下罚单:

    https://developercommunity.visualstudio.com/content/problem/488302/issue-with-double-parser.html

    该问题以“无法解决”结束,原因如下:

    计算量很大,我们通常会承担更多的风险

        2
  •  0
  •   ArthurAkhmerov    7 年前

    但是,不确定为什么会有差异,x86配置中的代码与x64配置中的代码不同。

    x86 configuration code

    x64 configuration code