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

Decimales sql

Estas en el tema de Decimales sql en el foro de Bases de Datos General en Foros del Web. Tengo un problema que me trae de cabeza horas. Que tipo tengo que utilizar en mi BD SQL para que me deje introducir decimales?...
  #1 (permalink)  
Antiguo 28/11/2010, 13:16
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Decimales sql

Tengo un problema que me trae de cabeza horas.
Que tipo tengo que utilizar en mi BD SQL para que me deje introducir decimales?
  #2 (permalink)  
Antiguo 28/11/2010, 13:45
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Decimales sql

en google hay informacion bastante de eso solo coloca numeros decimales y veras pero aca esta el primer link que me aparecio y seguro que te lo dice
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 28/11/2010, 14:16
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

Gracias. Utilizare FLOAT pero en LONGITUD, Que pongo?

Es posible en vez de 89.09 utilizar 89,09 (con coma)?
Gracias.
  #4 (permalink)  
Antiguo 28/11/2010, 14:31
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Decimales sql

ve en este link ahi te lo indican y lo explican bien
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 28/11/2010, 23:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Tema movido desde PHP a Bases de Datos
  #6 (permalink)  
Antiguo 29/11/2010, 04:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Decimales sql

Cita:
Iniciado por mariomon17 Ver Mensaje
Gracias. Utilizare FLOAT pero en LONGITUD, Que pongo?

Es posible en vez de 89.09 utilizar 89,09 (con coma)?
Gracias.
Los números (todos los tipos numéricos) se almacenan como numeros binarios, de allí que sólo se usen 1, 2, 4 y 8 bits para representar números de muchos enteros o decimales.
De allí que el tema de la representación de los numeros no es asunto de la base de datos, sino que es algo que debe manejar la aplicación: El conector usado toma un DOUBLE , lo envía como DOUBLE y lo recibe como DOUBLE. El dato en sí no tiene comas o puntos. Eso es una convención de representación.
Pero en tu caso lo que debes controlar es la regionalización de la aplicación, es decir, el idioma sobre el que ese formulario trabaja, ya que es internamente donde detalles como los separadores decimales y los signod de moneda y formato de fecha se manejan e interpretan.

Resumiendo: La base no recibe comas o puntos. Eso lo debes controlar en el programa. Lo que sí sucede es que la interfase de SQL , el intérprete de SQL del DBMS requiere que se envíen con puntos para que el SQL lo pueda parsear.

El cómo representes el dato en un formulario en el programa, es un problema de programación, no de bases de datos.
__________________
¿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 29/11/2010, 09:13
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

Entonces, como hago para enviarlo como comas porque yo envio esos datos con comas y solo se queda la parte entera?
  #8 (permalink)  
Antiguo 29/11/2010, 09:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Decimales sql

En primer lugar: ¿Con qué lenguaje estás programando? Diferentes lenguajes manejan las cosas de diferente 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)
  #9 (permalink)  
Antiguo 29/11/2010, 10:24
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

utilizo php.
  #10 (permalink)  
Antiguo 29/11/2010, 10:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Decimales sql

Para eso existen las funciones de conversión como number_format() y la clase NumberFormatter
Lo que nunca debes hacer es almacenar números como caracteres, o modificar el formato que MySQL usa para manejar los valores decimales, ya que lo que éste usa es el estándar internacional.
Todo problema de representación de fecha o número se debe resolver siempre en la aplicación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 29/11/2010, 12:11
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

De acuerdo usare esa clase, entonces y por ultimo (espero, jeje) en la BD pongo para decimales float, no?
Y en la columna precio (moneda) que pongo? tambien utilizo esta clase, verdad?
Gracias.
  #12 (permalink)  
Antiguo 29/11/2010, 12:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Decimales sql

En realidad, según dice el manual de referencia de MySQL, para los valores monetarios y todos aquelllos que requieran cierta precisión, se debe usar DECIMAL(l,d), donde l es la longitud total en bytes que usará, sumando enteros + punto decimal + decimales, mientras que d es la cantidad de decimales.
Esto es así porque FLOAT es un valor numérico decimal por aproximación, lo que puede llevar a que se generen redondeos que afecten (y bastante) los resultados financieros.
ASí, si el valor máximo a representar fuese 999999.99, el campo se debe definir como DECIMAL(9, 2).
¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 29/11/2010, 12:32
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

Ok, cambiare a DECIMAL(8,2)
  #14 (permalink)  
Antiguo 29/11/2010, 17:51
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

:O Ahora el problema viene en el formulario que funcion puedo usar para que detecte si se introdujo como punto o coma y lo cambie a punto para enviarlo a la BD.

Por cierto, investige un poco y descubri money_format() pero trabajo (en pruebas) en Windows y no me deja utilizarla. MIERDA! xD añadire el signo yo mismo.
Un saludo!

PD: Nuevo problema, el precio del producto es opcional que se introduzca o no, si no se introduce en la ficha de producto no aparece, si se introduce si sale, de esta forma si no se introduce automaticamente se fija en 0.00 € ¿Que puedo hacer? Ademas esto ocupa mas espacio en la BD.

Última edición por mariomon17; 30/11/2010 a las 16:43 Razón: Precio opcionable
  #15 (permalink)  
Antiguo 01/12/2010, 09:27
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

Alguien sabe como puedo solucionar lo del precio opcionable, gracias! :D
  #16 (permalink)  
Antiguo 01/12/2010, 09:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Decimales sql

Todo elemento opcional, es decir, un atributo o conjunto de atributos opcionales pueden implicar la existencia de una tabla dependiente (el en DER lógico se denominan "entidades débiles") cuya instancia depende de otra tabla.
Esto significaría que debes crear una tabla que almacene los precios si y sólo si se ingresan, y por ende también deberás crear dinámicamente la inserción a esa tabla.
Al menos eso sería lo correcto desde la óptica del modelo de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 01/12/2010, 11:14
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

Pero eso seria liar demasiado el asunto, una tabla solo para los precios? es demasiado, yo creo porque solo es un campo del producto nada mas, solo uno por producto (por fila).

Lo que ocurre es que con float el valor predeterminado era "nada" y con decimal es 0.00
Entonces si tu no indicabas precio en el INSET del producto, al mostrarlo no salia nada, pero si ahora no pones nada, este se muestra como 0,00 y parece que el producto es gratis.
  #18 (permalink)  
Antiguo 01/12/2010, 11:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Decimales sql

Cita:
Lo que ocurre es que con float el valor predeterminado era "nada" y con decimal es 0.00
Entonces si tu no indicabas precio en el INSET del producto, al mostrarlo no salia nada, pero si ahora no pones nada, este se muestra como 0,00 y parece que el producto es gratis.
Eso es un problema irrelevante para el modelo de datos. Es un problema de tipo procedimental y lo tienes que resolver en la aplicación, no en la base.

En otras palabras: Es una cuestión de diseño de aplicaciones... y por ende, decisión del que diseña la interfaz.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 01/12/2010, 15:31
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

Entonces? tendre q acer una comprobacion en la aplicacion de si es 0,00 no mostrar?
Gracias.
DUDA: Pero esto no ocupa mas espacio en la BD, porque seran muy pocos los productos que tengan el precio?

Que es lo mejor para convertir la coma del formulario en un punto para enviarlo a la BD, ¿Javascript o php? Gracias!
  #20 (permalink)  
Antiguo 01/12/2010, 17:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Decimales sql

Cita:
Entonces? tendre q acer una comprobacion en la aplicacion de si es 0,00 no mostrar?
Lamentablemente no hay escapatoria. Pero no es muy raro; yo lo hago en muchas aplicaciones, porque es más simple.
Habitualmente lo que haces es volver invisible el control en el Form, o bien no crearlo, cuando es una página dinámica.

Cita:
DUDA: Pero esto no ocupa mas espacio en la BD, porque seran muy pocos los productos que tengan el precio?
En tanto se trate de una tabla destinada a guardar descripciones o valores de referencia, no generará demasiado impacto. Serán 8 bytes máximo por registro.
SI el tema fuese una tabla con centenares de miles de registros... la cosa cambia. Puede insumir mucho espacio para datos que no se usan. En esos casos lo que hay que analizar es si la ocurrencia de nulos es muy alta, y si es así, crear la tabla separada.


Cita:
Que es lo mejor para convertir la coma del formulario en un punto para enviarlo a la BD, ¿Javascript o php? Gracias!
No usas Java para enviar datos a la base, sólo PHP. Yo preferiría usar el PHP, de esa forma el proceso se hace en servidor y no en el cliente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 02/12/2010, 08:40
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

Cita:
Habitualmente lo que haces es volver invisible el control en el Form, o bien no crearlo, cuando es una página dinámica.
Me podrias explicar esto, no logro entenderlo.
Que funcion puedo utilizar para: detectar si el decimal se ha metido con . o , y si es , convertirlo a .

Muchas gracias por tu paciencia! :D
  #22 (permalink)  
Antiguo 04/12/2010, 19:04
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

No sabes ninguna funcion?
He buscado bastante pero lo unico que encuentro es como hacerlo con JavaScript
Gracias
  #23 (permalink)  
Antiguo 04/12/2010, 19:52
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Decimales sql

puedes usar expresiones regulares por ejemplo
Código PHP:
Ver original
  1. <?php
  2. $patron  = "/^\d+\.?\d$/";
  3. $valor = "1..5";
  4. if(preg_match($patron,$valor)){
  5.     /*lo que se a que hagas*/
  6. }
  7. else{
  8.     echo "no es el formato";
  9. }
  10. ?>
creo que el patron se puede mejorar un poco pero en base es ese que el principio y el fin sea numero y que se pueda colocar punto entre el numero de inicio y de fin saludo
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #24 (permalink)  
Antiguo 04/12/2010, 20:41
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

Ese tambien me vale pero al final lo hice con este que encontre y es algo mas sencillo.
Código PHP:
Ver original
  1. (float)str_replace(",",".",$_POST['precio'])
  #25 (permalink)  
Antiguo 05/12/2010, 14:22
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Decimales sql

Cita:
Iniciado por mariomon17 Ver Mensaje
Ese tambien me vale pero al final lo hice con este que encontre y es algo mas sencillo.
Código PHP:
Ver original
  1. (float)str_replace(",",".",$_POST['precio'])
mm tienes razon y es mas rapido jaja que bien que allas encontrado tu repuesta saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #26 (permalink)  
Antiguo 05/12/2010, 18:07
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Decimales sql

Cita:
Iniciado por carlos_belisario Ver Mensaje
mm tienes razon y es mas rapido jaja que bien que allas encontrado tu repuesta saludos
Sin vuestra ayuda no hubiera podido.

Etiquetas: sql
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 23:00.