By default the .ToString() method of Double returns 15 digits of precision. If you want the full 17 digits that the double value holds internally, you need to pass the "G17" format specifier to the method.
String s = value.ToString("G17");
Sourced from the MSDN docs:
  By default, the return value only
  contains 15 digits of precision
  although a maximum of 17 digits is
  maintained internally. If the value of
  this instance has greater than 15
  digits, ToString returns
  PositiveInfinitySymbol or
  NegativeInfinitySymbol instead of the
  expected number. If you require more
  precision, specify format with the
  "G17" format specification, which
  always returns 17 digits of precision,
  or "R", which returns 15 digits if the
  number can be represented with that
  precision or 17 digits if the number
  can only be represented with maximum
  precision.