none
Obtener como string un Double, no puedo, no me permite C# .Net Framework RRS feed

  • Pregunta

  • Hola, 

    Programadores más antiguos y más nuevos, les quiero preguntar como se podría obtener como string un double con tantos decimales luego del punto. Hasta ahora probé todo y el .Net Framework no me lo permite, y eso que se supone que es lo mejor que hay en cuestión de Libraries y el Lenguaje C# también. No puedo creer que sea tan difícil hacer esto en un IDE o entorno y un lenguaje que se creó para ser poderoso y fácil de usar. A mi me da un poquito el marote para algoritmos y esas cosas pero lamentablemente no he podido aprender a adivinar.

    Probé todo lo siguiente, para que vean:

    string.Format("{0:0.00}", numero);

    .ToString("N6");

    .ToString("0.######");

    .ToString("0.000000");

    .ToString("#.######");

    y me aparecen todo tipo de cosas extrañas, menos, eso si, algo como

    12.80995681

    Y lo necesito porque le estoy haciendo un programita a un chico que pidió algo de figuras geométricas.

    Desde ya, les agradezco mucho su atención y su ayuda.

    Saludos

    Pablo

    domingo, 8 de marzo de 2020 19:44

Respuestas

  • Hola

    intenta con esto

    private static void Main(string[] args)
    {
        string numero = "12.134567989123";
        double.TryParse(numero, out double num);
        Console.WriteLine(num);
        Console.WriteLine(num.ToString("N0"));
        Console.WriteLine(num.ToString("N1"));
        Console.WriteLine(num.ToString("N2"));
        Console.WriteLine(num.ToString("N3"));
        Console.WriteLine(num.ToString("N4"));
        Console.WriteLine(num.ToString("N5"));
        Console.WriteLine(num.ToString("N6"));
        Console.WriteLine(num.ToString("N7"));
        Console.WriteLine(num.ToString("N8"));
        Console.ReadKey();
    }
    

    • Marcado como respuesta Tigre Pablito domingo, 8 de marzo de 2020 23:53
    domingo, 8 de marzo de 2020 20:36
  • hola

    Podrias tener un numeros como ser

    double nro = 12.80995681D;
    		
    Console.WriteLine("{0:N8}", nro);


    >>me aparecen todo tipo de cosas extrañas

    no entendi que tipo de cosas extrañas podrian ser

    quizas la cultura defina un sistema de puntuacion diferente por eso no tome el punto como separador decimal intepretando un numero diferene

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    domingo, 8 de marzo de 2020 21:28
  • [...] estoy en Windows Forms, y lo que quiero es asignar el string (en base al double) al Text de un Label.

    O sea, no funciona el {0:N8} ni con string.Format() ni con Double.ToString().

    ¿Cómo que no funciona? En Windows Forms es perfectamente lícito y se puede usar sin ningún problema el formato, tanto con string.Format como con .ToString:

    double d = loquesea;

    label1.Text = d.ToString("N6");

    o bien

    label1.Text = string.Format("{0:N6}", d);

    Captura de pantalla

    • Marcado como respuesta Tigre Pablito domingo, 8 de marzo de 2020 23:53
    domingo, 8 de marzo de 2020 21:59
    Moderador
  • hola

    Te esta tomando de forma incorreta el decimal, seguramente por la cultura

    string lado = "2.5796";
    
    double nro = Double.Parse(lado, CultureInfo.CreateSpecificCulture("en-US"));
    double area = nro * nro;
    Sino quieres usar la cultura ingresa el valor en el textbox de Lado con una coma como separador de decimales

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    domingo, 8 de marzo de 2020 22:57
  • hola

    >>¿cómo podría establecer la cultura, sin tener el [ string lado = "2.5796"; ]?,

    no necesitas un string

    la cultura la defines al inicio de la aplicacion, si es un desarrollo Winform en el Main() de Program.cs pones la lineas

    [STAThread]
    static void Main()
    {
        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
        System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    
        ...
    }

    de esta forma no importa la cultura definida en el sistema operativo siempre aplicas la misma en la aplicacion cuando ejecuta

    En este caso al usar en-US defines el punto como separador de decimales

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Tigre Pablito lunes, 9 de marzo de 2020 22:04
    lunes, 9 de marzo de 2020 3:40

Todas las respuestas

  • Hola

    intenta con esto

    private static void Main(string[] args)
    {
        string numero = "12.134567989123";
        double.TryParse(numero, out double num);
        Console.WriteLine(num);
        Console.WriteLine(num.ToString("N0"));
        Console.WriteLine(num.ToString("N1"));
        Console.WriteLine(num.ToString("N2"));
        Console.WriteLine(num.ToString("N3"));
        Console.WriteLine(num.ToString("N4"));
        Console.WriteLine(num.ToString("N5"));
        Console.WriteLine(num.ToString("N6"));
        Console.WriteLine(num.ToString("N7"));
        Console.WriteLine(num.ToString("N8"));
        Console.ReadKey();
    }
    

    • Marcado como respuesta Tigre Pablito domingo, 8 de marzo de 2020 23:53
    domingo, 8 de marzo de 2020 20:36
  • Hola Marti

    Gracias por responder.

    Me parece que partís de un string que contiene el número, pero yo no tengo (todavía) el string, sólo tengo un double, y necesito crear un string a partir de él, con "n" decimales.

    También, estoy intentando poner ese string en el Text de un Label.

    domingo, 8 de marzo de 2020 21:06
  • hola

    Podrias tener un numeros como ser

    double nro = 12.80995681D;
    		
    Console.WriteLine("{0:N8}", nro);


    >>me aparecen todo tipo de cosas extrañas

    no entendi que tipo de cosas extrañas podrian ser

    quizas la cultura defina un sistema de puntuacion diferente por eso no tome el punto como separador decimal intepretando un numero diferene

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    domingo, 8 de marzo de 2020 21:28
  • Hola Leandro,

    Gracias por responder.

    Pero estoy en Windows Forms, y lo que quiero es asignar el string (en base al double) al Text de un Label.

    O sea, no funciona el {0:N8} ni con string.Format() ni con Double.ToString().
    domingo, 8 de marzo de 2020 21:44
  • [...] estoy en Windows Forms, y lo que quiero es asignar el string (en base al double) al Text de un Label.

    O sea, no funciona el {0:N8} ni con string.Format() ni con Double.ToString().

    ¿Cómo que no funciona? En Windows Forms es perfectamente lícito y se puede usar sin ningún problema el formato, tanto con string.Format como con .ToString:

    double d = loquesea;

    label1.Text = d.ToString("N6");

    o bien

    label1.Text = string.Format("{0:N6}", d);

    Captura de pantalla

    • Marcado como respuesta Tigre Pablito domingo, 8 de marzo de 2020 23:53
    domingo, 8 de marzo de 2020 21:59
    Moderador
  • Hola Alberto,

    Gracias por responder.

    Te paso las capturas de pantalla para que veas como es que no funciona, al menos en mi sistema. Si pudieras resolvérmelo, te lo agradecería mucho.

    Esas son las cosas extrañas que le decía a Leandro.
    domingo, 8 de marzo de 2020 22:15
  • hola

    Te esta tomando de forma incorreta el decimal, seguramente por la cultura

    string lado = "2.5796";
    
    double nro = Double.Parse(lado, CultureInfo.CreateSpecificCulture("en-US"));
    double area = nro * nro;
    Sino quieres usar la cultura ingresa el valor en el textbox de Lado con una coma como separador de decimales

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    domingo, 8 de marzo de 2020 22:57
  • Muy agradecido con los 3 genios que respondieron (si, ya se que hay otros).

    Leandro, tal cual lo que dijiste de la coma en lugar del punto. 

    Y les pregunto, a cualquiera de los 3, ¿cómo podría establecer la cultura, sin tener el [ string lado = "2.5796"; ]?, porque si bien en el textBox ingreso un string, luego lo tengo que convertir a double y multiplicarlo por otro double (o elevarlo al cuadrado), y ahí obtengo un double (el área de la figura) que necesito pasarlo a string y no lo tengo en Text ni en ningún lado.

    domingo, 8 de marzo de 2020 23:51
  • hola

    >>¿cómo podría establecer la cultura, sin tener el [ string lado = "2.5796"; ]?,

    no necesitas un string

    la cultura la defines al inicio de la aplicacion, si es un desarrollo Winform en el Main() de Program.cs pones la lineas

    [STAThread]
    static void Main()
    {
        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
        System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    
        ...
    }

    de esta forma no importa la cultura definida en el sistema operativo siempre aplicas la misma en la aplicacion cuando ejecuta

    En este caso al usar en-US defines el punto como separador de decimales

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Tigre Pablito lunes, 9 de marzo de 2020 22:04
    lunes, 9 de marzo de 2020 3:40
  • Gracias, Leandro! Vos te sabes todo! 

    Saludos

    lunes, 9 de marzo de 2020 21:59