Resultados 1 al 13 de 13

Tema: Convertir String a Double en C sharp

  1. #1
    Pajarito Nuevo Avatar de RDVirgili
    Fecha de ingreso
    27 Sep, 10
    Mensajes
    48

    Convertir String a Double en C sharp

    Muy buen día para todos.-
    Bueno como lo dice el título, no logro encontrar la sintaxis correcta para convertir de string a double, no hagan caso al programa,es que de tanto en tanto dejo el manual con el que estoy aprendiendo C# y practico un poco.-(la intención es hacer una calculadora).-

    Código:
    using System;
    using System.Collections.Generic;
    
    public class calculadora
    {
        public static void Main(string[] args)
        {
            Console.Title = " Ejemplo de uso de Try - Catch";         
            Console.ForegroundColor = ConsoleColor.Yellow;  
            Console.BackgroundColor = ConsoleColor.Blue; 
            int clave = 0;
            while(clave == 0)
            {
                Console.Clear(); 
                Console.SetCursorPosition(01,01); 
                Console.Write(" Ingrese un entero....:"); 
                string singreso = Console.ReadLine();
                int ingreso;
    
                try
                {
                    ingreso = Convert.ToInt32(singreso);      
                    Console.SetCursorPosition(01,03); 
                    Console.WriteLine(" Ingresó: " + ingreso);
                    clave = 1;
                }
                catch (System.Exception)
                {
    
                    Console.SetCursorPosition(01,03); 
                    Console.Write(" Ingreso incorrecto (pulse una tecla para seguir...)");
                    Console.ReadLine(); 
                }
            }
            Console.SetCursorPosition(01,05); 
            Console.Write(" Pulse una tecla para finalizar..."); 
            Console.ReadLine(); 
        }
            
    }
    Bueno eso es todo.
    Saludos.
    Daniel
    abraza las cosas y personas malas como si fueran tu mas preciada joya, Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

  2. #2
    Get ready fighters! Avatar de FuuRe
    Fecha de ingreso
    03 May, 06
    Mensajes
    324

    Re: Convertir String a Double en C sharp

    La clase Convert tiene varios métodos, uno de ellos es ToDouble(string)

    Ojo con los puntos y las comas, el caracter separador de decimales está basado en la configuración regional de tu equipo.



    Código:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    double a = Convert.ToDouble("1.1");
                    double b = Convert.ToDouble("1,1");
    
                    Console.WriteLine("Punto: " + a.ToString() + " | Coma: " + b.ToString());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Plop!\n" + e.Message);
                }
    
                Console.ReadKey();
            }
        }
    }
    En este caso y como la configuración Español(Chile) por defecto es punto como separador de miles y coma para decimales, entonces el resultado es Punto = 11 y Coma = 1,1

    Si el caracter no es ninguno de los que tengas en los strings la aplicación se caerá.

    Si quieres obtener dinámicamente los separadores de decimales y miles por código, puedes usar (respectívamente)

    Código:
    CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
    CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator
    o

    Código:
    NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
    NumberFormatInfo.CurrentInfo.NumberGroupSeparator
    Ambos pertenecientes al namespace System.Globalization

    Saludos

  3. #3
    Pajarito Nuevo Avatar de RDVirgili
    Fecha de ingreso
    27 Sep, 10
    Mensajes
    48

    Re: Convertir String a Double en C sharp

    Hola FuuRe
    Ahora que logré convertir el string en double me encontré con el problema del "." y la "," si ingreso 12.5
    me imprime 125 pero si ingreso 12,5 me imprime 12,5, yo se que me pusiste el código pero no logro implementarlo, ¿me darías un ej. de como insertar tú code en mi programa?, soy demasiado nuevo y si bien hace 2 días que investigo no logro hacerlo funcionar.-

    Todo lo compilo en línea de comando.-

    Saludos.
    Daniel
    Última edición por RDVirgili; 08/04/2011 a las 15:06
    abraza las cosas y personas malas como si fueran tu mas preciada joya, Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

  4. #4
    Get ready fighters! Avatar de FuuRe
    Fecha de ingreso
    03 May, 06
    Mensajes
    324

    Re: Convertir String a Double en C sharp

    Tomé tu programa y le puse dos cosas

    1) Cambié el tipo de ingreso de int a double
    2) Dentro de tu while le puse un double.TryParse, que lo que hace es probar la conversión del valor del string singreso a double (Usé TryParse y no Parse porque me devuelve un bool que puedo usar en el if que puse), así si el valor ingresado realmente es un double la aplicación sigue, y si nó, sale del if y vuelve al while donde clave todavía es cero y reintenta la lectura del valor.

    Este es el código, ojalá te sirva

    Código:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Globalization;
    
    namespace ConsoleApplication1
    {
        class calculadora
        {
            public static void Main(string[] args)
            {
                Console.Title = " Ejemplo de uso de Try - Catch";
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.BackgroundColor = ConsoleColor.Blue;
                int clave = 0;
                while (clave == 0)
                {
                    Console.Clear();
                    Console.SetCursorPosition(01, 01);
                    Console.Write(" Ingrese un entero....:");
                    string singreso = Console.ReadLine();
                    double ingreso;
    
                    try
                    {
                        if (double.TryParse(singreso, out ingreso))
                        {
                            Console.SetCursorPosition(01, 03);
                            Console.WriteLine(" Ingresó: " + ingreso);
                            clave = 1;
                        }
                    }
                    catch (System.Exception e)
                    {
                        Console.SetCursorPosition(01, 03);
                        Console.Write(" Ingreso incorrecto (pulse una tecla para seguir...)\n" + e.Message);
                        Console.ReadLine();
                    }
                }
                Console.SetCursorPosition(01, 05);
                Console.Write(" Pulse una tecla para finalizar...");
                Console.ReadLine();
            }
        }
    }
    Saludos
    Última edición por FuuRe; 08/04/2011 a las 16:07

  5. #5
    Pajarito Nuevo Avatar de RDVirgili
    Fecha de ingreso
    27 Sep, 10
    Mensajes
    48

    Re: Convertir String a Double en C sharp

    Hola FuuRe
    Es evidente que no me supe explicar, el código me funciona perfectamente lo que no me funciona es el ".".-

    Saludos.
    Daniel
    abraza las cosas y personas malas como si fueran tu mas preciada joya, Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

  6. #6
    Get ready fighters! Avatar de FuuRe
    Fecha de ingreso
    03 May, 06
    Mensajes
    324

    Re: Convertir String a Double en C sharp

    ¿Quieres que el punto y la coma sirvan como separador de decimales?

  7. #7
    Pajarito Nuevo Avatar de RDVirgili
    Fecha de ingreso
    27 Sep, 10
    Mensajes
    48

    Re: Convertir String a Double en C sharp

    Hola
    Lo que quiero es que al ingresar 12.5 me imprima 12.5 y no 125, que me tome el punto como válido.-

    Saludos.
    Daniel
    abraza las cosas y personas malas como si fueran tu mas preciada joya, Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

  8. #8
    Get ready fighters! Avatar de FuuRe
    Fecha de ingreso
    03 May, 06
    Mensajes
    324

    Re: Convertir String a Double en C sharp

    Entonces:

    Código:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Globalization;
    
    namespace ConsoleApplication1
    {
        class calculadora
        {
            public static void Main(string[] args)
            {
                Console.Title = " Ejemplo de uso de Try - Catch";
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.BackgroundColor = ConsoleColor.Blue;
                int clave = 0;
                while (clave == 0)
                {
                    Console.Clear();
                    Console.SetCursorPosition(01, 01);
                    Console.Write(" Ingrese un entero....:");
                    string singreso = Console.ReadLine();
                    double ingreso;
    
                    // Manera estática (En duro)
                    //singreso = singreso.Replace(".", ",");
    
                    // Dinámica (Sirve para cualquier configuración regional)
                    //singreso = singreso.Replace(NumberFormatInfo.CurrentInfo.NumberGroupSeparator, NumberFormatInfo.CurrentInfo.NumberDecimalSeparator);
    
                    try
                    {
                        if (double.TryParse(singreso, out ingreso))
                        {
                            Console.SetCursorPosition(01, 03);
                            Console.WriteLine(" Ingresó: " + singreso);
                            clave = 1;
                        }
                    }
                    catch (System.Exception e)
                    {
                        Console.SetCursorPosition(01, 03);
                        Console.Write(" Ingreso incorrecto (pulse una tecla para seguir...)\n" + e.Message);
                        Console.ReadLine();
                    }
                }
                Console.SetCursorPosition(01, 05);
                Console.Write(" Pulse una tecla para finalizar...");
                Console.ReadLine();
            }
        }
    }
    No puedes trabajar el punto como separador válido de decimales, ya que como te mencioné, la configuración regional del equipo manda, por lo que tienes que "permitir" el ingreso de puntos como separador decimal pero antes de castearlo a double debes reemplazar el punto por la coma, para eso el uso del método Replace de los strings.

    Te puse dos maneras, una estática y una dinámica, las dos hacen lo mismo, pero si cambias tu info de configuración regional solo la dinámica servirá sin hacerle cambios al código.

    Descomenta la que necesites =)

    Saludos

  9. #9
    Pajarito Nuevo Avatar de RDVirgili
    Fecha de ingreso
    27 Sep, 10
    Mensajes
    48

    Re: Convertir String a Double en C sharp

    Hola FuuRe
    ¿Que pasa si ingreso 1.235,25?

    Saludos.
    Daniel
    Última edición por RDVirgili; 10/04/2011 a las 10:04 Razón: Surgió un imprevisto
    abraza las cosas y personas malas como si fueran tu mas preciada joya, Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

  10. #10
    Get ready fighters! Avatar de FuuRe
    Fecha de ingreso
    03 May, 06
    Mensajes
    324

    Re: Convertir String a Double en C sharp

    Cada vez que tengas que analizar un cambio en el código debes analizar si existe alguna manera viable de llevarlo a cabo y si el requerimiento tiene lógica.

    Necesitas ingresar un número, este puede llevar o no decimales, y de momento la aplicación ignora los separadores de miles convirtiendolos en decimales.

    ¿Te das cuenta de que lo que necesitas no es posible de momento?

    Me mencionas "¿Que pasa si ingreso 1.235,25?", según la lógica actual de la app, este sería convertido a "1,235,25" lo cual no es un número válido.

    Estás tratando de hacer una calculadora, pero las calculadoras actuales no permiten el ingreso manual de separadores de miles, esto pasa en la Calculadora de Windows, en Excel, en las calculadoras de bolsillo, etc... (Estoy seguro que debe haber una excepción, pero no se me viene ninguna a la mente).

    Siguiendo el ejemplo de la calculadora de Windows, deberías descartar por completo el ingreso de puntos (o el separador de miles de turno en el equipo, recuerda que te mostré una manera de obtenerlo dinámicamente), esto lo puedes hacer usando Replace en el string de entrada y reemplazar los puntos por vacíos.

    Dinámicamente sería:

    Código:
    singreso = singreso.Replace(NumberFormatInfo.CurrentInfo.NumberGroupSeparator, "");
    O, según mi opinión, la mejor manera de hacer todo esto sería haciendolo letra por letra, o sea, ir analizando cada uno de los caracteres al momento de su ingreso, eso lo puedes hacer con Console.ReadKey

    Estoy cocinando un ejemplo, lo posteo luego.

    Saludos

    ---------- Post added at 12:47 ---------- Previous post was at 11:46 ----------

    Código:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Globalization;
    
    namespace ConsoleApplication1
    {
        class calculadora
        {
            public static void Main(string[] args)
            {
                Console.Title = " Ejemplo de uso de Try - Catch";
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.BackgroundColor = ConsoleColor.Blue;
                int clave = 0;
    
                while (clave == 0)
                {
                    Console.Clear();
                    Console.SetCursorPosition(01, 01);
                    Console.Write(" Ingrese un entero....:");
                    string singreso = "";
                    bool finIngreso = false;
                    bool decimales = false;
    
                    while (finIngreso != true)
                    {
                        // Leo UN caracter
                        ConsoleKeyInfo caracter = Console.ReadKey(true);
                        int aux;
    
                        // Veo si es un entero
                        if(int.TryParse(caracter.KeyChar.ToString(), out aux))
                        {
                            singreso += aux.ToString();
                            Console.Write(aux.ToString());
                        }
                        // si no, reviso si es un separador de miles o de decimales, si es primera vez que se ingresa uno de ellos (y hay números ingresados previamente) lo inserto al string y cambio el flag "decimales"
                        else if ((caracter.KeyChar == Convert.ToChar(NumberFormatInfo.CurrentInfo.NumberGroupSeparator) || caracter.KeyChar == Convert.ToChar(NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)) && decimales == false && singreso.Length > 0)
                        {
                            singreso += NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
                            Console.Write(caracter.KeyChar);
                            decimales = true;
                        }
                        // Y si es un enter, termino el ingreso
                        else if (caracter.Key == ConsoleKey.Enter)
                        {
                            finIngreso = true;
                        }
                    }
    
                    double ingreso;
    
                    try
                    {
                        if (double.TryParse(singreso, out ingreso))
                        {
                            Console.SetCursorPosition(01, 03);
                            Console.WriteLine(" Ingresó: " + ingreso);
                            clave = 1;
                        }
                    }
                    catch (System.Exception e)
                    {
                        Console.SetCursorPosition(01, 03);
                        Console.Write(" Ingreso incorrecto (pulse una tecla para seguir...)\n" + e.Message);
                        Console.ReadLine();
                    }
                }
                Console.SetCursorPosition(01, 05);
                Console.Write(" Pulse una tecla para finalizar...");
                Console.ReadLine();
            }
        }
    }
    Ahi validas caracter por caracter al ingreso

    Saludos

  11. #11
    Pajarito Nuevo Avatar de RDVirgili
    Fecha de ingreso
    27 Sep, 10
    Mensajes
    48

    Re: Convertir String a Double en C sharp

    Hola FuuRe
    Si las primeras lineas de tu último post son de un tirón de orejas, mil disculpas x utilizar tanto tu tiempo, lo que pasa que soy un vehemente al tiempo de estudiar y suelo olvidarme las cosas tan importante como la lógica, mil disculpas.-
    Te diré que ahora si funciona perfectamente y nos has enseñado más que un manual.-
    Por último y perdón si me equivoco, el try - catch y mi while ¿ya no son necesarios?.-

    Saludos.
    Daniel
    abraza las cosas y personas malas como si fueran tu mas preciada joya, Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

  12. #12
    Get ready fighters! Avatar de FuuRe
    Fecha de ingreso
    03 May, 06
    Mensajes
    324

    Re: Convertir String a Double en C sharp

    Si en algún punto de mi post se notó algo similar a un tirón de orejas te ofrezco mis mas sinceras disculpas, me gusta enseñar, pero carezco del soporte pedagógico para hacerlo.

    Yo solo te decía eso porque creo que antes de ponerse a escribir código hay que pensar en lo que está hecho y en lo que se quiere hacer. Se que tu piensas lo mismo, solo te faltó llevarlo a la práctica esta vez =)

    Acerca del try-catch y el (primer) while creo yo que ya no son necesarios para tu código ya que si bien solucionamos la problemática del formato numérico nos podemos hacer la pregunta ¿Qué pasa si el usuario pone 34503894750238475902385092384759023478590238475092 38475023948572390478590234852903485023985702394857 20394857290348579023487529034857203947852362893475 69238475238956923847562938475623894756923847562389 47562398475692387562938475629384756293847562938475 62398475629384756923856239847569238475692384756013 47895623894792837569238475623948560238947562390847 56023945602394857023948762390478209358702394857230 948572039485723095... como número?. Fijate, tiene todas las convenciones numéricas que establecimos previamente (es un entero, no tiene puntos), pero el double no lo soporta y ese posible error ya está contenido en el double.TryParse.

    El primer while podría ser ocupado en mantener al usuario dentro de la aplicación, ya que el while interno se usa solo para el ciclo de lectura de un solo valor, eso depende de la lógica del código de tu calculadora, ahi le tienes que dar una vuelta mental y analizar de que manera se harán los ingresos numéricos y de los operadores, onda primero un número, luego el operador y luego el segundo. Para eso debes poner las validaciones correspondientes para cada uno (Ya hicimos la numérica, ahora falta la de los operadores).

    Y cualquier duda que tengas, feliz de responderla

    Saludos

  13. #13
    Experimentado
    Fecha de ingreso
    03 Sep, 07
    Mensajes
    698

    Re: Convertir String a Double en C sharp

    Después de asignar el valor leído en:
    string singreso = Console.ReadLine();
    verifica si es un número como propiamente tal, aquí la explicación del comando:

    Information.IsNumeric (Método) (Microsoft.VisualBasic)

    Saludos

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
*