Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

tipo de dato

Estas en el tema de tipo de dato en el foro de Mysql en Foros del Web. hola !.. necesito hacer unos subtotales.. pero deben ser exactos.. estos tienes decimales... primero decidí asignarles el tipo de dato decimal a mis campos.. pero ...
  #1 (permalink)  
Antiguo 09/09/2008, 11:45
 
Fecha de Ingreso: agosto-2008
Mensajes: 173
Antigüedad: 15 años, 8 meses
Puntos: 0
tipo de dato

hola !..

necesito hacer unos subtotales.. pero deben ser exactos.. estos tienes decimales...

primero decidí asignarles el tipo de dato decimal a mis campos.. pero no me agarraban.. (valga la redundancia) los decimales..

ahorita lo cambie a float.. pero me redondea!!!

como debo hacerle para que me haga las operaciones tal cual....
alguna idea?

para dar mas detalle .. les comento que los datos de las tablas los importo a la base de datos con archivos excel.. con extension .csv.. para esto.. las celdas de los numeros decimales les tengo que quitar las comas y cambiarlos por puntos para que los subo a la base con los decimales.. de otro modo.. con las comas no los agarra...

entonces al momento de checar si subio bien todo... los datos estan redondeados en la tabla....

Última edición por susan_; 09/09/2008 a las 12:16 Razón: detallar mas
  #2 (permalink)  
Antiguo 09/09/2008, 12:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: tipo de dato

Para redondear lo que tienes que usar es la función ROUND() y fijar la cantidad de decimales que quieres representar:
Según el manual:
Cita:
ROUND(X), ROUND(X,D)

Retorna el argumento X, redondeado al entero más cercano. Con dos argumentos, retorna X redondeado a D decimales. D puede ser negativo para redondear D dígitos a la izquierda del punto decimal del valor X.

mysql> SELECT ROUND(-1.23);
-> -1
mysql> SELECT ROUND(-1.58);
-> -2
mysql> SELECT ROUND(1.58);
-> 2
mysql> SELECT ROUND(1.298, 1);
-> 1.3
mysql> SELECT ROUND(1.298, 0);
-> 1
mysql> SELECT ROUND(23.298, -1);
-> 20

El tipo de retorno es el mismo tipo que el del primer argumento (asumiendo que sea un entero, doble o decimal). Esto significa que para un argumento entero, el resultado es un entero (sin decimales).

Antes de MySQL 5.0.3, el comportamiento de ROUND() cuando el argumento se encuentra a medias entre dos enteros depende de la implementación de la biblioteca C. Implementaciones distintas redondean al número par más próximo, siempre arriba, siempre abajo, o siempre hacia cero. Si necesita un tipo de redondeo, debe usar una función bien definida como TRUNCATE() o FLOOR() en su lugar.

Desde MySQL 5.0.3, ROUND() usa la biblioteca de matemática precisa para valores exactos cuando el primer argumento es un valor con decimales:

*

Para números exactos, ROUND() usa la regla de "redondea la mitad hacia arriba": Un valor con una parte fracional de .5 o mayor se redondea arriba al siguiente entero si es positivo o hacia abajo si el siguiente entero es negativo. (En otras palabras, se redondea en dirección contraria al cero.) Un valor con una parte fraccional menor a .5 se redondea hacia abajo al siguiente entero si es positivo o hacia arriba si el siguiente entero es negativo.
*

Para números aproximados, el resultado depende de la biblioteca C. En muchos sistemas, esto significa que ROUND() usa la regla de "redondeo al número par más cercano": Un valor con una parte fraccional se redondea al entero más cercano.

El siguiente ejemplo muestra cómo el redondeo difiere para valores exactos y aproximados:

mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3 | 2 |
+------------+--------------+
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 09/09/2008, 15:14
 
Fecha de Ingreso: agosto-2008
Mensajes: 173
Antigüedad: 15 años, 8 meses
Puntos: 0
Exclamación Respuesta: tipo de dato

hola gnzsoloyo...
mmm... a lo mejor no me explique bien...

mira los datos los importo en archivos .csv.. de excel... a la base de datos, desde ese momento se cargan redondeados .. y yo no quiero REDONDEAR al contrario quiero que los pase tal cual!!
  #4 (permalink)  
Antiguo 09/09/2008, 15:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: tipo de dato

Bien. Entonces lo que deseas es hacer (según dice el primer post) subtotales. Eso está claro, ¿pero cuál es el problema concreto que tienes para hacerlos?

Si el problema es lograr un TOTAL, sabes que tienes que usar SUM(), y si quieres subtotales previos, debes usar el GROUP BY y ROLLUP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 09/09/2008, 15:31
 
Fecha de Ingreso: agosto-2008
Mensajes: 173
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: tipo de dato

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bien. Entonces lo que deseas es hacer (según dice el primer post) subtotales. Eso está claro, ¿pero cuál es el problema concreto que tienes para hacerlos?

Si el problema es lograr un TOTAL, sabes que tienes que usar SUM(), y si quieres subtotales previos, debes usar el GROUP BY y ROLLUP.
si mira..
pero antes de hacer los subtotales ...
tengo el problema que se pasan mal los datos del archivo .csv... los pasa redondeados ..
  #6 (permalink)  
Antiguo 09/09/2008, 15:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: tipo de dato

Bien.
¿Cómo es el proceso de cargar los datos?
- Los exportas directamente desde Excel a MySQL.
- Exportas un *.CSV, ¿y luego cómo lo cargas? ¿Con LOAD DATA o de otra forma?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 09/09/2008, 15:38
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: tipo de dato

Cual es la estructura de tu tabla? en especial que tamaño tiene la columna que contiene los datos decimales?
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #8 (permalink)  
Antiguo 09/09/2008, 15:46
 
Fecha de Ingreso: agosto-2008
Mensajes: 173
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: tipo de dato

ok.. miren...

el archivo .csv.. por ejemplo uno que se llama ejerc_dev... tiene 3 columnas.. la primera le doy formato de texto, la segunda de numero sin decimal.. y la tercera y con la que tengo problemas es numero pero con 2 decimales...

ahora..
en excel te pone los puntos con comas... ok?... pero si le dejo las comas... al importarlo desde phpmyadmin... con CSV usando LOAD DATA... no me respeta los decimales.. los pone enteros ni siquiera los redondea...

entonces lo que hago es reemplazar las comas por puntos en excel.. y los importo así... peeeero!.. al revisar la tabla los datos estan redondeados....

me explique?
  #9 (permalink)  
Antiguo 09/09/2008, 15:48
 
Fecha de Ingreso: agosto-2008
Mensajes: 173
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: tipo de dato

y la estructura de mi tabla es :
ppresup varchar(16)
pfinanc int(9)
imp_fm float(15,2)

Última edición por susan_; 09/09/2008 a las 15:48 Razón: error
  #10 (permalink)  
Antiguo 09/09/2008, 15:58
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: tipo de dato

Quiere decir
Si en tu archivo .csv el dato esta por ejemplo 15.26 al importarlo queda 15.30? a eso te refieres?
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #11 (permalink)  
Antiguo 09/09/2008, 16:31
 
Fecha de Ingreso: agosto-2008
Mensajes: 173
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: tipo de dato

Cita:
Iniciado por Genetix Ver Mensaje
Quiere decir
Si en tu archivo .csv el dato esta por ejemplo 15.26 al importarlo queda 15.30? a eso te refieres?
exacto!!!!
  #12 (permalink)  
Antiguo 09/09/2008, 17:25
 
Fecha de Ingreso: agosto-2008
Mensajes: 173
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: tipo de dato

help!!!!!!!!!!!!!
  #13 (permalink)  
Antiguo 09/09/2008, 17:58
 
Fecha de Ingreso: agosto-2008
Mensajes: 173
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: tipo de dato

porque se fueron!!! help!
  #14 (permalink)  
Antiguo 10/09/2008, 04:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: tipo de dato

susan_

Si en el campo float tienes datos ya, exporta con el formato con punto (aunque creo que eso no te dará problema) a otro campo de texto (varchar) creado al efecto, es decir, el campo que recibe el dato debe ser texto. Luego haremos la conversión a float o decimal... Si no tienes valores en ese campo float, cambia su tipo a varchar antes del load.

Este es un primer paso.


Se me ocurre...
  #15 (permalink)  
Antiguo 10/09/2008, 07:28
 
Fecha de Ingreso: agosto-2008
Mensajes: 173
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: tipo de dato

Cita:
Iniciado por jurena Ver Mensaje
susan_

Si en el campo float tienes datos ya, exporta con el formato con punto (aunque creo que eso no te dará problema) a otro campo de texto (varchar) creado al efecto, es decir, el campo que recibe el dato debe ser texto. Luego haremos la conversión a float o decimal... Si no tienes valores en ese campo float, cambia su tipo a varchar antes del load.

Este es un primer paso.


Se me ocurre...
eso suena bien.. dejame checar si? gracias jurena.. no te me vayas para decirte que paso si? gracias.
  #16 (permalink)  
Antiguo 10/09/2008, 07:48
 
Fecha de Ingreso: agosto-2008
Mensajes: 173
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: tipo de dato

excelente!...
lo recibi como tipo varchar el campo ... y despues lo cambie a decimal... por que en float... al hacer el cambio me lo redondea... eso pasaba!!!

gracias jurena!!!!
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 18:57.