FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Componente Stringgrild
Buenas tardes, en un manual que me descargue de delphi, me pone ue haga un ejercicio con el coponente srtinggrild. Lo copio para que lo entendais:
2.- Construir un concentrado que contenga los ingresos por ventas mensuales de los 3 primeros meses del año de 4 sucursales de una cadena refaccionaría, agregar listas de ingresos totales por mes e ingresos promedios por sucursal. Tengo el sigiente codigo:
Al ejecutarlo me va todo bien pero cuando le doy al boton calcular me da el siguente error: raised excemtio class econverterror with message is not vaid floating point value. He mirado y no he encontrado el fallo, aunque seguro que sera una tonteria como siempre me suele pasar. Un saludo y gracias de antemano Última edición por Casimiro Notevi fecha: 08-02-2011 a las 13:59:24. Razón: Poner etiquetas [delphi] [/delphi] |
#2
|
||||
|
||||
Cita:
Supongo que el problema está en la función StrToFloat. Le pasas un string y te devuelve un Float. Si el string es vacío o tiene letras o más de un punto, te dará un error de conversión Cita:
Por ejemplo:
|
#3
|
|||
|
|||
Cita:
|
#4
|
||||
|
||||
¿Has modificado tu procedimiento como te he comentado (try..except)?
¿Sigue fallando? ¿Con qué error? ¿En qué línea? |
#5
|
|||
|
|||
Cita:
Yo creo que el fallo esta en toda las lineas. |
#6
|
||||
|
||||
Cita:
Si el error es exactamente "No puedo convertir " Quiere decir que la celda en ese renglón y esa columna está vacío. Si el error es algo así como "No puedo convertir 123.456.678"; Quiere decir que la celda en ese renglón y esa columna tiene el valor "123.456.678" que no es un valor válido. (Tiene 2 puntos) Por lo que comentas, creo que es el primer error y por lo tanto se puede tomar como un 0 y es lo que hace el trozo de código si hay una excepción. Cita:
En el segundo bucle trata de convertir nuevamente los valores y vuelve a fallar. Si nos dices EXACTAMENTE qué valores tiene las celdas (con sus puntos, comas y signos) te podrémos decir qué es lo que fallará. Ten en cuenta que para convertir un número con la función StrToFloat el string que le pasas: - solo debe tener números - solo puede haber un punto que separe la parte entera de la decimal. - si fuera negativo podría empezar con el signo "-" - no debe contener espacios. |
#7
|
|||
|
|||
Cita:
|
#8
|
||||
|
||||
Si quieres más información sobre el error puedes agregarla al mensaje de la exceción
|
#9
|
||||
|
||||
Hola JLMN22.
Estuve mirando tu código y dos motivos causan tus errores. (Error de conversión) Si lees la propiedad Cells de TStringGrid, verás que no es: [Fila, Columna], sino:[Columna, Fila]. Cuando haces: y la variable 'renglones' alcanza el valor 3, es lógico que allí haya un espacio vacío por que esa es la posición de los meses y estos sólo tendrían que alcanzar el valor 2. Ojalá hubiesen sido 4 meses... Entonces lo correcto sería:
Ahora tenés otro error, que lógicamente aún no has podido descubrir... Si miramos la declaración de los arreglos y los valores en que inician y finalizan los for, no nos dan las cuentas... Empiezan en una posición inexistente(0) y terminan una posición antes(3) como por ejemplo: totsuc. Cuando recorremos los arreglos tenemos que sumar 1 tanto a filas como a columnas. Bueno, resumiendo:
Para evitar posibles errores de conversión en el ingreso de los valores, use la función TryStrToFloat, informando sucursal y mes en que se produjo en tal caso. Otra cosa, el begin / end es innecesario cuando hay una sola instrucción, lo único que logra es oscurecer el código. No comprobé si el resultado concuerda con la lógica del algorítmo, eso lo dejo a tu buen criterio... Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 13-02-2011 a las 13:26:48. |
#10
|
|||
|
|||
Cita:
|
#11
|
||||
|
||||
Cita:
Mira lo que te comenta ecfisa en el post anterior. Cita:
|
#12
|
|||
|
|||
Ahora me da fallo la suma por sucursal y promedio por sucursal
El resto de cosas concuerdan pero ahora el fallo es la suma por sucursal y promedio opr sucursal que dan mal el calculo. Dejo mi codigo:
procedure TForm1.CalcularClick(Sender: TObject); var totsuc: array [1..4] of real; promsuc: array [1..4] of real; totmes: array [1..3] of real; prommes: array [1..3] of real; columnas:integer; renglones:integer; begin for renglones:=0 to 3 do begin for columnas:=0 to 2 do begin totsuc[renglones+1]:=totsuc[renglones+1]+strtofloat(stringgrid1.Cells[columnas,renglones]); end; end; for renglones:=0 to 3 do begin promsuc[renglones+1]:=totsuc[renglones+1]/3; end; for renglones:=0 to 3 do begin for columnas:=0 to 2 do begin totmes[columnas+1]:=totmes[columnas+1]+strtofloat(stringgrid1.Cells[columnas,renglones]); end; end; for columnas:=0 to 2 do begin prommes[columnas+1]:=totmes[columnas+1]/4; end; for renglones := 0 to 3 do begin listbox1.Items.Add(floattostr(totsuc[renglones+1])); listbox2.Items.Add(floattostr(promsuc[renglones+1])); end; for columnas := 0 to 2 do begin listbox3.Items.Add(floattostr(totmes[columnas+1])); listbox4.Items.Add(floattostr(prommes[columnas+1])) end; end; end. Última edición por ecfisa fecha: 15-02-2011 a las 17:30:57. |
#13
|
||||
|
||||
Hola JLMN22.
Por favor, tratá de usar las etiquetas [delphi] y [/delphi] para encerrar el código Delphi que pongas en los mensajes, de ese modo se hace mucho más legible. [ Uso de Etiquetas vB ] Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 15-02-2011 a las 13:47:35. |
#14
|
|||
|
|||
Ya he puiesto con etiquetas, espero que este bien
|
#15
|
||||
|
||||
Hola JLMN22.
Esta muy bién. Muchas gracias por tu colaboración. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 15-02-2011 a las 23:16:09. |
#16
|
|||
|
|||
Menos masl que por fi he acertado, pero tengo el problema que he comentado anteriormente, el fallo es la suma por sucursal y promedio opr sucursal que dan mal el calculo
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
como comparar cada linea de un componente Memo1 con un componente ListBox1 | soma25 | C++ Builder | 1 | 31-10-2007 11:02:22 |
Componente VCL a OCX | Pook | OOP | 4 | 27-04-2006 11:27:24 |
Componente | chalys | Varios | 1 | 20-10-2005 09:11:47 |
Componente mes | carlomagno | OOP | 1 | 24-08-2004 00:15:29 |
Apuntar una propiedad de un componente a otra de otro componente | Majo | Varios | 10 | 24-03-2004 20:46:39 |
|