Principales respuestas
Obtener como string un Double, no puedo, no me permite C# .Net Framework

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
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
-
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- Editado Leandro TuttiniMVP domingo, 8 de marzo de 2020 21:29
- Marcado como respuesta Tigre Pablito domingo, 8 de marzo de 2020 23:53
-
[...] 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);
- Marcado como respuesta Tigre Pablito domingo, 8 de marzo de 2020 23:53
-
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- Editado Leandro TuttiniMVP domingo, 8 de marzo de 2020 22:58
- Marcado como respuesta Tigre Pablito domingo, 8 de marzo de 2020 23:53
-
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
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
-
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.
-
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- Editado Leandro TuttiniMVP domingo, 8 de marzo de 2020 21:29
- Marcado como respuesta Tigre Pablito domingo, 8 de marzo de 2020 23:53
-
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().- Editado Tigre Pablito domingo, 8 de marzo de 2020 21:46
-
[...] 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);
- Marcado como respuesta Tigre Pablito domingo, 8 de marzo de 2020 23:53
-
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.- Editado Tigre Pablito domingo, 8 de marzo de 2020 22:16
-
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- Editado Leandro TuttiniMVP domingo, 8 de marzo de 2020 22:58
- Marcado como respuesta Tigre Pablito domingo, 8 de marzo de 2020 23:53
-
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.
-
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
-