3

Cómo convertir un objeto string a double sin perder precision, por ejemplo 12.9 (string) a double.

sstan
  • 16,591
  • 2
  • 21
  • 45
Ricardo
  • 103
  • 1
  • 2
  • 10
  • Al ver los comentarios debajo de las respuestas, parece que tu pregunta tiene mas que ver con un problema en particular que estás teniendo. De ser el caso, por favor incluye un [mcve] para entender el problema. – sstan Dec 15 '16 at 19:16
  • 1
    Posible duplicado de [Guia definitiva de conversión de tipos en c#](http://es.stackoverflow.com/questions/1738/guia-definitiva-de-conversi%c3%b3n-de-tipos-en-c) – jasilva Dec 15 '16 at 19:50

3 Answers3

6

Buenas.
Para convertir un numero desde string a double se usa:

Convert.ToDouble(value);

Esto está documentado en Convert to double. Cuando la conversión pierda precisión, se lanzará una excepción.

También es importante mencionar que esta función hace una llamada a Double.Parse() con el formato de la cultura en la que el programa esta ejecutándose, esto afecta en la forma en la que se interpreta el valor con referencia a elementos como el . (punto) o la , (coma). Para formatear la entrada sin considerar la configuracion cultural local se usa:

double.Parse(value, CultureInfo.InvariantCulture)

Se pueden ver ejemplos del uso de los distintos formatos en IFormatProvider Interface

Cuando necesites mas precisión, puedes usar el tipo Decimal.
Este tiene un rango de (-7.9 x 1028 hasta 7.9 x 1028) / (100 hasta 28)

UselesssCat
  • 3,127
  • 1
  • 18
  • 43
  • El problema es que la conversión que realizo queda a 129 (usando el ejemplo que coloqué en la pregunta), y si, uso Convert.ToDouble(value); para ello. – Ricardo Dec 15 '16 at 18:48
  • 1
    Probablemente tenga que ver con el formato local. Prueba algo como esto ```double.Parse("3.5", CultureInfo.InvariantCulture)``` – UselesssCat Dec 15 '16 at 18:51
  • Si, yo también probé en otra pc y si funciona, cuando llegue a casa daré más información si Dios lo permite. – Ricardo Dec 15 '16 at 19:14
  • Gracias, me funcionó usar CultureInfo.InvariantCulture. – Ricardo Dec 18 '16 at 15:09
2

Puedes hacerlo de esta forma:

string convertirvalor ="12.9";
double valorconvertido = double.Parse(convertirvalor);
Alberto Arenas
  • 363
  • 5
  • 12
  • 30
1

Necesitas usar el método Convert.ToDouble que lo puedes usar de la siguiente manera

Convert.ToDouble(string);

te dejo la documentacion de Microsoft por si te sirve consultarla.

JL Tinoco
  • 11
  • 1
  • El problema es que la conversión que realizo queda a 129 (usando el ejemplo que coloqué en la pregunta), y si, uso Convert.ToDouble(value); para ello. – Ricardo Dec 15 '16 at 18:48
  • ¿Podrías darnos más información? – JL Tinoco Dec 15 '16 at 19:05
  • Realicé el ejemplo en [fiddle](https://dotnetfiddle.net/PioyZB) y parece que funciona todo bien – JL Tinoco Dec 15 '16 at 19:06
  • Si, yo también probé en otra pc y si funciona, cuando llegue a casa daré más información si Dios lo permite. – Ricardo Dec 15 '16 at 19:14
  • Añade la parte de código para que te podamos apoyar. – JL Tinoco Dec 15 '16 at 20:07
  • Tu configuración regional podría estar causándote problemas, de todos modos puedes probar esto: Double mi_double = double.Parse(my_string, NumberStyles.AllowThousands| NumberStyles.AllowDecimalPoint , new CultureInfo("es-ES")); Puedes verificar el resto de los parámetros Allow en [MSDN](https://msdn.microsoft.com/es-es/library/system.globalization.numberstyles(v=vs.110).aspx) – Leodev Dec 19 '16 at 19:33