Foros del Web » Programación para mayores de 30 ;) » .NET »

Convertir una cadena a formato Double

Estas en el tema de Convertir una cadena a formato Double en el foro de .NET en Foros del Web. Buenas. Estoy con este tremendo lío. A simple vista parece un problema trivial, pero su solución no lo es en absoluto. Necesito convertir a tipo ...
  #1 (permalink)  
Antiguo 14/11/2008, 11:42
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Convertir una cadena a formato Double

Buenas. Estoy con este tremendo lío. A simple vista parece un problema trivial, pero su solución no lo es en absoluto. Necesito convertir a tipo double una cadena que tiene la forma \d+.\d+ (2.413 ; 321.32 ; 33.33) . Intente de varias formas posibles: CDbl(), Convert.ToDouble(), Double.Parse() y en cada una de ellas obtengo siempre el mismo resultado: la cadena se convierte, pero se pierden los lugares decimales, es decir, siempre me los transforma en un número entero. Por ejemplo, el 2.413 pasa a ser 2413, el 321.32 es luego 32132 y así con todos los números. Esto no me ocurre si en lugar de separar los decimales con un caracter '.' los separo con ','. Supongo que el problema debe venir por una cuestión de formato de la cadena.
Reemplazando el "." por "," en cada cadena me funciona bien, pero no puedo realizar eso, ya que estoy haciendo un analizador de expresiones matemáticas y el caracter "," está reservado para la separación de los argumentos cuando se llama a una función.
Saludos.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 14/11/2008, 12:26
 
Fecha de Ingreso: septiembre-2006
Ubicación: Culiacán Sinaloa México
Mensajes: 5
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Convertir una cadena a formato Double

Antes de hacer la conversion de string a double, te recomiendo que a la cadena le cambies los puntos por coma.

string cadena="10.5";
cadena.Replace(".",",");
Convert.ToDouble(cadena);

asi te dara resultado.
  #3 (permalink)  
Antiguo 14/11/2008, 21:57
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Convertir una cadena a formato Double

tu problema es de Culturizacion

revisa algo como esto

NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberGroupSeparator = ",";
string s = "3.1415";
double d = double.Parse(s, nfi);
Console.WriteLine(d);
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #4 (permalink)  
Antiguo 14/11/2008, 22:13
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Mensaje Respuesta: Convertir una cadena a formato Double

Hola,

Cita:
Iniciado por mariano_donati Ver Mensaje
... Reemplazando el "." por "," en cada cadena me funciona bien, pero no puedo realizar eso, ya que estoy haciendo un analizador de expresiones matemáticas y el caracter "," está reservado para la separación de los argumentos cuando se llama a una función ...
¿ Si está reservado también para separar los argumentos entonces como hace el analizador para diferenciar los dos casos siguientes ?

func (1,234,12,456) -->

A. func(1,234 , 123,465)
B. func(1 , 234,123,465)

O algo parecido ... Usas otro carácter para separar los argumentos, o no permites separadores de miles en tu ecuación, o usas el ".". O posiblemente yo estoy hablando de otra cosa...

Saludos,

Última edición por HackmanC; 14/11/2008 a las 22:22 Razón: fixes
  #5 (permalink)  
Antiguo 17/11/2008, 02:16
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Respuesta: Convertir una cadena a formato Double

Efectivamente era un problema de culturización, ya pude solucionarlo. Gracias!. Con respecto a tu pregunta hackmanC, no permito separadores de miles, cuando encuentra el caracter '.' es interpretado como separador decimal únicamente.
Saludos y gracias nuevamente por sus respuestas.
__________________
Add, never Remove
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:22.