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

2 problemas

Estas en el tema de 2 problemas en el foro de .NET en Foros del Web. Buenos dias tengo 2 problemillas 1 es con un ejercicio de financiacion que me dice lo siguiente cuando le doy al boton de limpiar financiamiento: ...
  #1 (permalink)  
Antiguo 15/07/2012, 05:57
 
Fecha de Ingreso: octubre-2009
Mensajes: 182
Antigüedad: 14 años, 6 meses
Puntos: 5
2 problemas

Buenos dias tengo 2 problemillas 1 es con un ejercicio de financiacion que me dice lo siguiente cuando le doy al boton de limpiar financiamiento:

Pongo el codigo del checkbox de que hace el financiamiento a 2 años:


double importe, aumento,valor_2;
string valor;
aumento = 0;
aumento = double.Parse(textBox6.Text) * double.Parse(textBox7.Text) / 100;
importe = aumento + double.Parse(textBox6.Text);
valor = Convert.ToString(importe / 24);
valor_2 = importe / 24;
textBox8.Text = string.Format("{0:f2}",valor_2);


El fallo me lo da en la linea aumento = double.Parse(textBox6.Text) * double.Parse(textBox7.Text) / 100; Dice que La cadena de entrada no tiene el formato correcto. Hace bien el calculo hace bien todo pero es pinchar al boton limpiar financiamiento y me sale eso, el boton de limpiar financiamiento tiene el siguiente codigo:

textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
textBox9.Text = "";
checkBox1.Checked = false;
checkBox2.Checked = false;

El segundo problema es de diseño que sera facil de resolver seguramente trata de un if que saca la tabla de multiplicar que el usuario ponga pongo el codigo:

nt x, resultado;
resultado = 0;
x = 0;
for (x = 1; x <= 10; x++)
resultado = Int32.Parse(textBox1.Text) * x;
listBox1.Items.Add(resultado.ToString());

Resulta que el programa ahora solo me saca un numero es decir lo que correspondria al multuiplicar por 10 si en el textob se pone 3 el programa saca 30, por ejemplo.

Esos 2 problemas tengo, Gracias de ante mano.
  #2 (permalink)  
Antiguo 15/07/2012, 06:38
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: 2 problemas

Buenas,

En el primer problema tendrías que especificar cuando se ejecuta el siguiente código:

Código C#:
Ver original
  1. double importe, aumento,valor_2;
  2. string valor;
  3. aumento = 0;
  4. aumento = double.Parse(textBox6.Text) * double.Parse(textBox7.Text) / 100;
  5. importe = aumento + double.Parse(textBox6.Text);
  6. valor = Convert.ToString(importe / 24);
  7. valor_2 = importe / 24;
  8. textBox8.Text = string.Format("{0:f2}",valor_2);

Porque supongo que será al cambiar el estado del checkbox, pero no lo indicas explícitamente.

En cualquier caso, tienes que comprobar que los datos que hay en el textbox son correctos para poder realizar la conversión.

Código C#:
Ver original
  1. double importe;
  2. double valor1=0, valor2 =0;
  3.  
  4. if (Double.TryParse(textBox6.Text,valor1) && Double.TryParse(textBox7.Text,valor2)
  5.         {
  6.             importe =  (valor1 * valor2 / 100) + valor1;
  7.             textBox8.Text = string.Format("{0:f2}",importe / 24);
  8.         }

En el segundo problema te faltan unas llaves para que el método Add se realice por cada vuelta del bucle.

Código C#:
Ver original
  1. nt x, resultado;
  2. resultado = 0;
  3. x = 0;
  4. for (x = 1; x <= 10; x++){
  5. resultado = Int32.Parse(textBox1.Text) * x;
  6. listBox1.Items.Add(resultado.ToString());
  7. }

Saludos.
  #3 (permalink)  
Antiguo 15/07/2012, 07:42
 
Fecha de Ingreso: octubre-2009
Mensajes: 182
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: 2 problemas

Cita:
Iniciado por alexg88 Ver Mensaje
Buenas,

En el primer problema tendrías que especificar cuando se ejecuta el siguiente código:

Código C#:
Ver original
  1. double importe, aumento,valor_2;
  2. string valor;
  3. aumento = 0;
  4. aumento = double.Parse(textBox6.Text) * double.Parse(textBox7.Text) / 100;
  5. importe = aumento + double.Parse(textBox6.Text);
  6. valor = Convert.ToString(importe / 24);
  7. valor_2 = importe / 24;
  8. textBox8.Text = string.Format("{0:f2}",valor_2);

Porque supongo que será al cambiar el estado del checkbox, pero no lo indicas explícitamente.

En cualquier caso, tienes que comprobar que los datos que hay en el textbox son correctos para poder realizar la conversión.

Código C#:
Ver original
  1. double importe;
  2. double valor1=0, valor2 =0;
  3.  
  4. if (Double.TryParse(textBox6.Text,valor1) && Double.TryParse(textBox7.Text,valor2)
  5.         {
  6.             importe =  (valor1 * valor2 / 100) + valor1;
  7.             textBox8.Text = string.Format("{0:f2}",importe / 24);
  8.         }

En el segundo problema te faltan unas llaves para que el método Add se realice por cada vuelta del bucle.

Código C#:
Ver original
  1. nt x, resultado;
  2. resultado = 0;
  3. x = 0;
  4. for (x = 1; x <= 10; x++){
  5. resultado = Int32.Parse(textBox1.Text) * x;
  6. listBox1.Items.Add(resultado.ToString());
  7. }

Saludos.
Buenas, el segundo fallo es un error de pardillo las llavecitas de los lenguajes e programacion basados en C. El primer problema no entiendo que hace el if, nunca he echo un if que tenga un textbox una coma y una variable y no entiendo que hace ese && o el y como queramos llamar, tampoco entiendo que hace tryparse, yo he usado el metodo Parse pero no try parse.. He programado anteriormente en lenguajes visuales y nunca he echo ni me he encontrado con una sentencia if de esas caractaristicas. ¿Siempre se aprende algo, no?.

De ser posible para entenderno necesitaria una explicacion detallada por que nunca me habia encontrado con algo ni parecido.


if (Double.TryParse(textBox6.Text,valor1) && Double.TryParse(textBox7.Text,valor2)
{
importe = (valor1 * valor2 / 100) + valor1;
textBox8.Text = string.Format("{0:f2}",importe / 24);
}
  #4 (permalink)  
Antiguo 15/07/2012, 08:45
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: 2 problemas

Buenas,

Hay un pequeño error en el código. La llamada a TryParse tiene que ser la siguiente:

Código C#:
Ver original
  1. if (Double.TryParse(textBox6.Text,out valor1) && Double.TryParse(textBox7.Text, out valor2)
  2. {
  3. importe = (valor1 * valor2 / 100) + valor1;
  4. textBox8.Text = string.Format("{0:f2}",importe / 24);
  5. }

Una vez indicado esto, te explico como funciona.

La llamada Double.TryParse convierte una cadena en un double pero evitando las excepciones que devuelve el método Double.Parse cuando la conversión no se puede realizar.

La llamada tiene el siguiente formato:

Código C#:
Ver original
  1. public static bool TryParse (
  2.     string s,
  3.     out double result
  4. )

Es decir, es un método al que se le pasa la cadena a convertir y devuelve como parámetro de salida un valor double (sólo en caso de que se pueda convertir).

La palabra out indica que un parámetro es de salida, es decir, que puede ser cambiado dentro del método para devolver un valor distinto al pasado.

El método como puedes observar devuelve un valor booleano y devuelve true si la conversión ha sido correcta y false en caso concreto.

De esta manera, Double.TryParse(textBox6.Text,out valor1), devuelve true si la conversión ha sido correcta y la variable valor1 tendrá el valor convertido.

Si juntas las dos expresiones con un && (un and lógico), quiere decir que cuando las dos conversiones sean correctas, entonces realizas el cálculo.

Espero que te haya quedado algo claro.

Saludos.
  #5 (permalink)  
Antiguo 15/07/2012, 09:44
 
Fecha de Ingreso: octubre-2009
Mensajes: 182
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: 2 problemas

Cita:
Iniciado por alexg88 Ver Mensaje
Buenas,

Hay un pequeño error en el código. La llamada a TryParse tiene que ser la siguiente:

Código C#:
Ver original
  1. if (Double.TryParse(textBox6.Text,out valor1) && Double.TryParse(textBox7.Text, out valor2)
  2. {
  3. importe = (valor1 * valor2 / 100) + valor1;
  4. textBox8.Text = string.Format("{0:f2}",importe / 24);
  5. }

Una vez indicado esto, te explico como funciona.

La llamada Double.TryParse convierte una cadena en un double pero evitando las excepciones que devuelve el método Double.Parse cuando la conversión no se puede realizar.

La llamada tiene el siguiente formato:

Código C#:
Ver original
  1. public static bool TryParse (
  2.     string s,
  3.     out double result
  4. )

Es decir, es un método al que se le pasa la cadena a convertir y devuelve como parámetro de salida un valor double (sólo en caso de que se pueda convertir).

La palabra out indica que un parámetro es de salida, es decir, que puede ser cambiado dentro del método para devolver un valor distinto al pasado.

El método como puedes observar devuelve un valor booleano y devuelve true si la conversión ha sido correcta y false en caso concreto.

De esta manera, Double.TryParse(textBox6.Text,out valor1), devuelve true si la conversión ha sido correcta y la variable valor1 tendrá el valor convertido.

Si juntas las dos expresiones con un && (un and lógico), quiere decir que cuando las dos conversiones sean correctas, entonces realizas el cálculo.

Espero que te haya quedado algo claro.

Saludos.

Para consejo. Es mejor que se utilice try.parse que parse solo para no tener problemas de este tipo por lo que veo. Este lenguaje el c# es buenoi pero a la vez es el mas dificil de coguer el tranquillo de los que yo he programado hasta ahora, nuca he tenido tantos problemas a la hora de aprender un lenguaje de programacion como este.
  #6 (permalink)  
Antiguo 15/07/2012, 10:38
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: 2 problemas

Buenas,

Es mejor usar TryParse porque te evitas tener que capturar las excepciones que lanza el método Parse. Además, TryParse es más rápido que Parse por lo dicho anteriormente (capturar una excepción es costoso en tiempo de ejecución, lo cual no quiere decir que no haya que utilizarlas).

Así se haría con excepciones:

Código C#:
Ver original
  1. double importe;
  2. double valor1=0, valor2 =0;
  3.  
  4. try{
  5.  
  6. valor1 = Double.Parse(textBox6.Text);
  7. valor2 = Double.Parse(textBox7.Text);
  8. importe =  (valor1 * valor2 / 100) + valor1;
  9. textBox8.Text = string.Format("{0:f2}",importe / 24);
  10.  
  11. }catch(Exception e){
  12.    Console.WriteLine("No se puede convertir los datos");
  13. }

Sobre la dificultad del lenguaje, C# es uno de los lenguajes más sencillos que existen, al ser un lenguaje de alto nivel, pero como todos los lenguajes hay que aprenderse las características que posee, las cuales son muchas y algunas más avanzadas (eventos, delegados, expresiones lambda, etc.).

Además, C# es uno de los lenguajes de la plataforma .NET, lo cual quiere decir que viene incluido con muchas librerías que encapsulan funcionalidades muy útiles, como LINQ.

Saludos.
  #7 (permalink)  
Antiguo 16/07/2012, 02:48
 
Fecha de Ingreso: octubre-2009
Mensajes: 182
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: 2 problemas

Cita:
Iniciado por alexg88 Ver Mensaje
Buenas,

Es mejor usar TryParse porque te evitas tener que capturar las excepciones que lanza el método Parse. Además, TryParse es más rápido que Parse por lo dicho anteriormente (capturar una excepción es costoso en tiempo de ejecución, lo cual no quiere decir que no haya que utilizarlas).

Así se haría con excepciones:

Código C#:
Ver original
  1. double importe;
  2. double valor1=0, valor2 =0;
  3.  
  4. try{
  5.  
  6. valor1 = Double.Parse(textBox6.Text);
  7. valor2 = Double.Parse(textBox7.Text);
  8. importe =  (valor1 * valor2 / 100) + valor1;
  9. textBox8.Text = string.Format("{0:f2}",importe / 24);
  10.  
  11. }catch(Exception e){
  12.    Console.WriteLine("No se puede convertir los datos");
  13. }

Sobre la dificultad del lenguaje, C# es uno de los lenguajes más sencillos que existen, al ser un lenguaje de alto nivel, pero como todos los lenguajes hay que aprenderse las características que posee, las cuales son muchas y algunas más avanzadas (eventos, delegados, expresiones lambda, etc.).

Además, C# es uno de los lenguajes de la plataforma .NET, lo cual quiere decir que viene incluido con muchas librerías que encapsulan funcionalidades muy útiles, como LINQ.

Saludos.
Para que yo me aclare un poco mas si quiero convertir un dato mejor hacer esto por ejemplo: Double.TryParse(textBox6.Text,out valor1), que double.parse(textbox6.text).

A si lo tengo yo mas claro a la hora de seguir trabajando con c# .net.
  #8 (permalink)  
Antiguo 16/07/2012, 02:56
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: 2 problemas

Ya te he respondido en mi mensaje anterior.

Sí es mejor usar TryParse en vez Parse, pero mientras captures las excepciones puedes usar Parse si así lo quieres.

Saludos.

Etiquetas: tabla, textbox
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 12:30.