https://foro.gambas-es.org/viewtopic.php?f=3&t=7559&p=45013#p45013
-----------------------------------
gambafeliz
Sabado, 06 Julio 2019, 22:01

Re: Truncar Campo Float A Dos Decimales
-----------------------------------
[quote user="shordi" post="45011"][quote user="gambafeliz" post="44965"][quote user="tincho" post="44963"][quote user="gambafeliz" post="44956"]Tengo una base de datos SQLite3[/quote]
Bienvenido.
En las bases de datos Sqlite3 yo suelo poner REAL y no Float y todo va bien.
Creo que te encuentras ante algún error de diseño de la base de datos.
Saludos.[/quote]

Hola :)

Seguramente es así, es que es mi primera incursión en SQLite3, además de Gambas3 y es un proyecto que lo empecé en PHP y procede de un archivo CSV donde yo lo exporto a SQLite3, [strike]los campos ya venían en Float y lo que hice es simplemente dejarlos así.[/strike] he instalado DB Browser for SQLite y el campo no es Float y si es REAL como me habías dicho. 

[strike]Como ya te has fijado por la historieta todo es un perfecto desarrollo basado en un novato en todos estos campos.
[/strike] Como ya no me acordaba, en su día lo hice bien, pero como lo estoy comenzando nuevamente pero en Gambas pues no lo miré y di por valido lo que en la Zona de Conexiones de Gambas3 tiene y ahí me decía en la estructura de la tabla que era Float y no REAL. 

Ahora con esta nueva información que opinais. De momento Gambas3 informa mal de la estructura del campo o quizás es su forma de representarlo.

Oye gracias [strike]lo miraré para adaptarlo[/strike] y seguiré preguntando sobre muchas mas cosas y espero que me ayudes en el futuro. Por cierto me encantó Gambas3, mi enhorabuena a los desarrolladores y demás personas que hacen que sea posible.[/quote]

Sqlite no es una base de datos de tipos de datos fijos y rígidos. Funciona con lo que llaman afinidad de datos:
[url=https://translate.google.es/translate?sl=en&tl=es&u=https%3A%2F%2Fwww.sqlite.org%2Fdraft%2Fdatatype3.html]https://translate.google.es/translate?sl=en&tl=es&u=https%3A%2F%2Fwww.sqlite.org%2Fdraft%2Fdatatype3.html

Subrayo la frase:
"[i]Cualquier columna en una base de datos SQLite versión 3, excepto una columna INTEGER PRIMARY KEY , puede usarse para almacenar un valor de cualquier clase de almacenamiento.[/i]"
A estas conversiones que la propia sqlite realiza debemos sumar la conversión de sus tipos a los de gambas
[url=http://www.gambaswiki.org/wiki/doc/db-type-mapping]http://www.gambaswiki.org/wiki/doc/db-type-mapping

Por eso es importante ver la estructura de la BBDD y el código que la manipula para saber qué está pasando.

Por último, no me parece correcto el enfoque de no subir ni tu base de datos ni tu código y pretender que adivinemos qué es lo que te está fallando. Entiendo ese pudor que se tiene al principio de mostrar código... pero la única forma de progresar de verdad es el trabajo en grupo.

Saludos[/quote]

Gracias por las respuestas a ambos, pero con perdón no hace falta dramatizar por Dios, no tengo ningún doble sentido, quizás desconocimiento en como trasmitir la información, recordad que no es lo mismo escribir que hablar, quizás en una terracita con una buena bebida y algo calentito o del tiempo para comer y buenas vistas a lo mejor podríamos dialogar con más perspectiva. Pero bueno.

Bueno jóvenes os doy lo que creo que han pedido, espero acertar sin causar alboroto. Gracias.

Esta es el create de la tabla Gastos:
CREATE TABLE "Gastos" ( "Descripción" TEXT, "Importe" REAL, "Cargos" REAL, "Lanzamiento" TEXT, "Vencimiento" TEXT, "Realizado" TEXT, "Categoría" TEXT, "Subcategoría" TEXT, "Tarjeta" TEXT, "Cuenta" TEXT, "Observaciones" TEXT )

El código era muy simple:

' Esto es lo que hago ahora, pero antes el Round estaba en el Resultado
Resultado = Conn.Exec("SELECT Descripción, Round(Importe, 2) As Importe, Round(Cargos, 2) As Cargos, Lanzamiento, Realizado From Gastos WHERE Realizado BETWEEN '" & ano & "/" & Format(mes, "00") & "/01' AND '" & ano & "/" & Format(mes, "00") & "/" & Format(fec.ultimoDiaMes(), "00") & "' ORDER BY Realizado ASC; ")
  Gridviewdatos.Rows.Count = Resultado.Count
  For c = 0 To Resultado.Count - 1
    Gridviewdatos[c, 0].Text = Resultado["Descripción"] 
    Gridviewdatos[c, 1].Text = Format(Resultado["Importe"], "-0.00 €") ' Yo ponía aquí, Round(Resultado["Importe"], -2) que es lo que me dijisteis, no es así.
    Gridviewdatos[c, 2].Text = Format(Resultado["Cargos"], "-0.00 €")
   Resultado.MoveNext
  Next
  Gridviewdatos.Refresh  

Espero no tener que poner mas código ya que con esto ya deberían saber seguirlo. O lo doy por echo. 

Y sino me comentan lo que necesitan quizás dándome mas aclaraciones y yo lo hago, es que a veces si no me dicen más directamente lo que quieren yo ni me entero.


