A veces veo cosas sin sentido en los doubles de .NET hace tiempo descubrí que dividir un número por cero no generaba una excepción... para ser justos aquella vez estaba usando Integers... pero también era curioso.
Pues hoy voy y me doy cuenta de que
Double.Parse(Double.MaxValue.ToString())
Es curioso que no se pueda parsear el mayor double posible... algo así como que el mayor double posible no es un double... vamos 100% absurdo.
Pues realmente no es absurdo de todo, tiene su sentido. Lo que pasa es que Double y Single son dos tipos de datos "imprecisos" digamos que hay unos bits que representan el número y pasa que al hacerle el ToString a esos bits el ordenador nos devuelve un número aproximado. En este caso el string que nos devuelve es tan aproximado que el parser no lo entiende.
Si deseamos obtener un número que si se pueda parsear deberemos reescribir nuestro código así:
Double.Parse(Double.MaxValue.ToString("r"))
Eso si, estaremos desperdiciando ciclos de nuestro procesador, porque es bastante más estricto calculando el número.
Si nos encontramos con este problema, yo os recomendaría que en vez de usar un Double usaseis un tipo Decimal, ya que este es 100% preciso, y así os olvidáis de los gritos del cliente histérico de turno diciendo que le faltan dos céntimos de los miles de millones de facturación de este año.
Por cierto, si se repite el ejemplo con un tipo Single no falla... y es que el single es tan simple y tiene tan poca precisión y no se entera de la mitad de las cosas de su hermano mayor double ;)