Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

format y operaciones matematicas
#1

Hola, tengo el siguiente código, el detalle es en el evento click del botón (al final), ahí comparto mis dudas


GAMBAS
  1. ' Gambas class file
  2. Public iNumRegCatalogo As Integer
  3.  
  4. Public Sub Form_Open()
  5.  
  6.   Dim archivo As CsvFile
  7.   Dim iregistro As Integer
  8.   Dim cRegistrosCatalogo As New Collection
  9.  
  10.   'abrir archivo CSV
  11.   archivo = New CsvFile(Application.Path & "/catalogo.csv")
  12.  
  13.   'meter contenido a un collection
  14.   Do Until archivo.Eof
  15.     cRegistrosCatalogo[archivo.Line] = archivo.Read()
  16.     Inc iNumRegCatalogo    
  17.   Loop
  18.  
  19.   ' cerrar archivo
  20.   archivo.Close()
  21.  
  22.   ' agregar columnas al tableview
  23.   TableView1.AddColumn("Descripcion", 500)
  24.   TableView1.AddColumn("Precio", 100)
  25.     
  26.   'agregar un renglón al tabeview para poder introducir datos
  27.   Inc TableView1.Rows.Count
  28.  
  29. ' meter el contenido del collection al tableview
  30.   For iregistro = 2 To iNumRegCatalogo
  31.     
  32.     TableView1[iregistro - 2, 0].Text = cRegistrosCatalogo[iregistro]["descripción"]
  33.     
  34. ' la columna del precio, tienen que ir formateada con signo de pesos y alineada a la derecha
  35.     TableView1[iregistro - 2, 1].Text = Format(cRegistrosCatalogo[iregistro]["precio distribuidor sin IVA"], GB.Currency)
  36.     TableView1[iregistro - 2, 1].Alignment = 2
  37.     
  38. ' siguiente registro
  39.     Inc TableView1.Rows.Count
  40.   Next
  41.  
  42.  
  43.  
  44. Public Sub btnSuma_Click()
  45.  
  46. ' calcular la suma de todos los registros del tableview
  47.  
  48.   Dim iregistro As Integer
  49.   Dim fsuma As Float
  50.   Dim simporte As String
  51.  
  52.   fsuma = 0
  53.   For iregistro = 2 To iNumRegCatalogo
  54.     
  55.     ' sumamos uno a uno cada registro  
  56.  
  57.     fsuma = fsuma + CFloat(TableView1[iregistro, 1].Text)  
  58.  
  59.   Next
  60.  
  61. ' mostramos la suma
  62.   txtSuma.Text = fsuma
  63.  
  64.     




El problema es que el CFLOAT, marca error, no coinciden los tipos: requerido float, obtenido string en cambio.  

Después de muchas vueltas supuse que el problema era que el contenido del TableView1[iregistro, 1].Text tenia el signo de $, y eso provocaba que el CFLOAT fallara, así que lo quite de esta forma:
   
GAMBAS
  1. simporte = Trim(Mid(TableView1[iregistro, 1].Text, 2, TableView1[iregistro, 1].Text.Len))
  2. fsuma = fsuma + CFloat(simporte)


    
Pero aun así sigue marcando el mismo error, así que mi conclusión es que el problema es el FORMAT,  en lugar de poner comas (,) a los miles pone espacios en blanco  (1,234.56 lo pone 1 234.56)  y el CFLOAT no es capaz de convertirlo.
    
Revisando la instrucción format, las paginas donde lo he consultado, muestran que el resultado coloca comas, no espacios es blanco, alguien que me pueda guiar?
El contenido del tableview lo pongo con formato para la debida presentación, aquí solo pongo dos columnas, pero realmente son varias, y pues tengo que distinguir entre aquellas que representan dinero y las que solo cantidades.  
 

Anexo imagen donde el format no coloca las comas "," sino espacios en blanco.


Archivos adjuntos Miniatura(s)
   
    ¡Gracias!
#2

Hola , AlfonsoC3 . tal como mencionas .El problema es el el formato de como estan las cantidades , una solucion rapida es que elimines el simbolo $ en las cantidades y los espacios que hay en cada cantidad para ello puedes usar lo siguiente .

Donde "item" sera el campo de la tabla a la que estes apuntando .

Este te ayudara a eliminar el simbolo y los espacios de las cantidades .
Replace(Replace(item, "$", ""), " ", "")

te coloco un ejemplo aqui .

GAMBAS
  1. Private Function fn_SumaElementos() As Float
  2. Dim cantidadARr As New String[] 'este seria un ejemplo de un arreglo de cantidades monetarias
  3.  
  4. 'lleno el arreglo con las cantidades
  5. cantidadARr.Add("$1 077.59")
  6. cantidadARr.Add("$ 1 250")
  7.  
  8.  
  9. Dim item As String 'me permitira obtener el elemento en la iteracion del for each
  10. Dim suma As Float = 0.0 'suma de elementos o cantidades monetarias .
  11.  
  12. 'recorro el arreglo de las cantidades monetarias con un for each .
  13.  
  14. For Each item In cantidadARr
  15.   item = Replace(Replace(item, "$", ""), " ", "") 'reemplazo los simbolos y espacios que tienen cada elemento
  16.   suma += CFloat(Trim(item)) 'convierto el string en float y a la misma vez sumo cada elemento
  17. Return suma 'salido del for each y obtengo el resultado de la suma de cada elemento ,o suma total de elementos


Espero que sea de ayuda .saludos

henry15ea
[-] Los siguientes 1 usuarios dice gracias a HenryGuzman por este post:
  • alfonsoC3
    ¡Gracias!
#3

Hola Alfoso, bienvenido al foro.
Mira, cuando se trata de manejar cifras que están guardadas como texto ya sea en una tabla o en un archivo de texto (como el caso de tu programa) gambas no siempre responde adecuadamente, el principal problema es la localización del sistema y que función tiene la coma en el mismo.
Algunos consejos que pueden ayudarte.
  • No guardar los datos con símbolos $, € o algo por el estilo.
  • Usar la función Replace("$","") , Replace(",",".") , Replace(".",",") , Replace(" ",",") segun sea el caso.
  • Usar la función Val(sPrecio) en lugar de CFloat
Espero que te sirva de ayuda.

1 Saludo.
[-] Los siguientes 1 usuarios dice gracias a tincho por este post:
  • alfonsoC3
    ¡Gracias!
#4

¿Puede cargar el "catalogo.csv" en el foro, para que podamos ver lo que contiene?
[-] Los siguientes 1 usuarios dice gracias a cogier por este post:
  • alfonsoC3
    ¡Gracias!
#5

Hola

Como consejo para algunos de los participantes en este hilo, os dejo un tip para que el código fuente de gambas quede perfectamente coloreado según su sintaxis:

https://gambas-es.org/showthread.php?tid=20

Estéticamente queda mucho mejor y es más fácil leerlo por todos los participantes.

Gracias

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
[-] Los siguientes 2 usuarios dicen gracias a jguardon por este post:
  • alfonsoC3, HenryGuzman
    ¡Gracias!
#6

@HenryGuzman, si, al final me di cuenta que serian los formatos los que estaban ocasionando los problemas y opte por no dar un formato como tal, si no simplemente agregar  el carácter "$" y no usar la opción de las "," para los miles, y para hacer las operaciones opte por un left para quitar el símbolo de "$', nunca pensé en el replace como opción, pero lo voy a revisar!, muchas gracias!

@tincho, si, a la mala me di cuenta, pero fijate que según yo no guardo los datos con formato al menos el los archivos, el formato solo lo quería para que se vieran "bonitos" en el tableview, pero como no quería acceder otra vez al archivo y filtrar la información para hacer la suma, decidí sacarla del tableview y pues ahí estaba el detalle jejeje, muchas gracias!

@cogier, llegando a casa lo posteo

@jguardon, gracias!, lo tomare en cuenta para la próxima duda Big Grin

--Alfonso Mtz
[-] Los siguientes 1 usuarios dice gracias a alfonsoC3 por este post:
  • HenryGuzman
    ¡Gracias!
#7

(16-08-2022, 01:12)alfonsoC3 escribió:  lo tomare en cuenta para la próxima duda

Ehmmm...  Rolleyes sería mejor si editaras tu primer mensaje de esta discusión, como jguardon sugirió, para que las partes de código sean más legibles.

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!
#8

(16-08-2022, 15:23)vuott escribió:  si editaras tu primer mensaje

Ya lo he hecho yo, se ve bastante mejor así. Tongue

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
    ¡Gracias!
#9

Ooooooh.... Deo gratias !

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)