C# Converting 20 digit precision double to string and back again

Use the “R” numeric format string:

double d = 0.00034101243963859839;
string s = d.ToString("R");
double d2 = double.Parse(s);
if(d == d2)
  //-- Success

The R stands for “round-trip”. From the linked document:

This format is supported only for the Single and Double types. The round-trip specifier guarantees that a numeric value converted to a string will be parsed back into the same numeric value.

As an aside, I suspect there is no way to keep those last two digits. There’s only so much precision available, and I doubt they ever make it into d in the first place. But you can make sure your string at least reads back what you do have correctly.

If you really need the additional precision, you might try using a decimal instead.

Leave a Comment