代码之家  ›  专栏  ›  技术社区  ›  Tristan Rhodes

使用往返格式说明符“R”的64位与32位双重解析问题

  •  3
  • Tristan Rhodes  · 技术社区  · 7 年前

    [Fact]
    public void ParseTest()
    {
        var numText = "51.580133";
        double.Parse(numText)
            .ToString("R")
            .Should().Be(numText);
    }
    

    1. 为什么会发生这种情况?
    2. 有哪些选项可以可靠地将该值舍入/截断为6dp?

    这可以工作,并为ToString(“G6”)生成不同的输出:

    [Fact]
    public void ParseText()
    {
        var numText = "51.580133";
        double.Parse(numText)
            .ToString("G8")
            .Should().Be(numText);
    }
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   Community CDub    5 年前

    我从微软那里找到了一个有趣的观点,这或许可以解释这个问题

    在某些情况下,使用“R”标准数字格式的双值 如果使用 /平台:x64或/平台:anycpu交换机并在64位系统上运行。

    “G17”标准数字格式字符串。以下示例使用 往返原始值。

    https://msdn.microsoft.com/en-us/library/kfsatb94(v=vs.110).aspx