Skip to content

G17 format specifier doesn't always round-trip double values #28703

@Metalnem

Description

@Metalnem

The documentation for numeric format strings says that the G17 format specifier is the recommended way for round-tripping double values, but it doesn't always work. Here is the full example of one such case:

using System;

namespace Roundtripping
{
  public class Program
  {
    public static void Main(string[] args)
    {
      var s = "23723333333333333433333337";

      double d1 = Double.Parse(s);
      double d2 = Double.Parse(d1.ToString("G17"));

      Console.WriteLine(d1 == d2);
    }
  }
}

This program prints false on .NET Core 2.2.104, and true on .NET Core 3.0.100-preview-010184. I see that there were a lot of issues and commits fixing the R specifier, but I was under the impression that G17 was always supposed to work.

Found via SharpFuzz.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions