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

ayuda con decimal,float, o double i los euros 600.000 o 1.000.000

Estas en el tema de ayuda con decimal,float, o double i los euros 600.000 o 1.000.000 en el foro de Mysql en Foros del Web. estoy haciendo pruebas pero no hay maneras he probado con double (11,2) float (11,2) decimal (11,2) 11 numero y 2 van a ser decimales pero ...
  #1 (permalink)  
Antiguo 14/01/2011, 04:31
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 1 mes
Puntos: 1
ayuda con decimal,float, o double i los euros 600.000 o 1.000.000

estoy haciendo pruebas pero no hay maneras

he probado con
double
(11,2)
float
(11,2)
decimal
(11,2)

11 numero y 2 van a ser decimales pero cuando encuentra el punto
600.00
1.00

quiero entrar por ejemplo 600.000 o 1.000.000 euros

no tendría que ser cuando coja una , que me ponga 2 decimales

y si pongo 11 sin los 2 decimales tampoco funciona

Código MySQL:
Ver original
  1. CREATE TABLE edificio
  2. (
  3.   edificio_codigo SMALLINT UNSIGNED NOT NULL UNIQUE,
  4.   edificio_precio DOUBLE(11,2) NOT NULL,
  5.   CONSTRAINT pk_edifici PRIMARY KEY (edifici_id,edifici_codi)
  6. ) CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDB;

Código MySQL:
Ver original
  1. INSERT INTO  edificio(edificio_codigo,edificio_precio) VALUES ('1','600.000');
  2. INSERT INTO  edificio(edificio_codigo,edificio_precio) VALUES ('2','1.000.000');

Para guardar el símbolo de euros que me aconsejáis euro ENUM('€')
o con SET

cuando haga el formulario are que el símbolo del euro y metros cuadrados no se tenga que rellenar cada vez si entras un edificio nuevo

es un valor que no varia

Última edición por albertrc; 14/01/2011 a las 04:57
  #2 (permalink)  
Antiguo 14/01/2011, 05:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: ayuda con decimal,float, o double i los euros 600.000 o 1.000.000

Código MySQL:
Ver original
  1. INSERT INTO  edificio(edificio_codigo,edificio_precio) VALUES ('1',600000);
  2. INSERT INTO  edificio(edificio_codigo,edificio_precio) VALUES ('2',1000000);

Los numero deben ser numeros no strings con separador de miles....


Manual


Cita:
En SQL estándar, los tipos REAL y DOUBLE PRECISION no aceptan especificaciones de precisión. MySQL soporta una sintaxis alternativa con dos números dados entre paréntesis a continuación del nombre del tipo. El primer número representa el ancho a mostrar y el segundo número especifica el número de dígitos a almacenar y mostrar a continuación del punto decimal.
Para entrar 1.000.000,50 (un millon con cicuenta centimos) debes tener lo siguiente

edificio_precio DOUBLE(9,2) NOT NULL

INSERT INTO edificio(edificio_codigo,edificio_precio) VALUES ('2',1000000.5)

En cuanto al símbolo no entiendo tu problema guarda el nombre de la moneda si quieres, cuando lo muestres puedes poner el simbolo. O mejor guarda un id referenciado a una tabla auxiliar "Monedas"

Monedas
id_Moneda
Nombre
Simbolo
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 14/01/2011, 05:23
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: ayuda con decimal,float, o double i los euros 600.000 o 1.000.000

Cita:
estoy haciendo pruebas pero no hay maneras

he probado con
double
(11,2)
float
(11,2)
decimal
(11,2)

11 numero y 2 van a ser decimales pero cuando encuentra el punto
600.00
1.00

quiero entrar por ejemplo 600.000 o 1.000.000 euros

no tendría que ser cuando coja una , que me ponga 2 decimales

y si pongo 11 sin los 2 decimales tampoco funciona
El problema es que estás confundiendo representación con almacenamiento.
Los puntos y comas de la representación numérica son cosas que se implementan en las interfaces gráficas para que el usuario entienda los números en un lenguaje natural. Pero los separadores de miles carecen de sentido a nivel de almacenamiento, no se los representa y tampoco se los almacena.
En la realidad, los números se almacenan como binarios y no como cifras (este es un error muy común ente los que se inician en programación y bases de datos), y como binarios es como se los maneja incluso en la memoria RAM. Hay razones fundamentales por las que esto es así. Así pues, un valor como 2356, se almacenará realmente como 00001001 00110100, pero como esto está codificado, como hexadecimal en realidad usa 2 bytes para guardarlo y no cuatro.
¿Más o menos se entiende la ida?
Entonces, los DBMS no comprenden nada que no sea número cuando el contexto es un campo de tipo FLOAT, REAL o DECIMAL, para que un valor dado se almacene correctamente, debes escribirlo correctamente. Por caso: El número 6.000.000,00 se debe escribir en la sentencia como 6000000.00 . Notarás que estoy eliminando los puntos de miles y cambiando la coma por el punto; esto último es simplemente porque los DBMS interpretan un estándar heredado del inglés done el punto es siempre separador de decimales.
Normalmente, cuando estás programando en un lenguaje dado, el mismo lenguaje de programación te aporta las funciones necesarias para pasar el valor como parámetro d la sentencia y darle el formato correcto. No es algo de lo que debas ocuparte manualmente. Hay métodos para manejar esto.
Lo que si debes recordar es que luego, cuando recuperas el valor debes también usar las funciones que el lenguaje tiene para darle al número el formato que el usuario entienda.
Sé que eso parece molesto, pero es así como se hacen todos los programas. Lograr que una aplicación haga algo es fácil. Lo que más tiempo lleva es validar lo que entra y formatear lo que sale, sin contar la infinidad de horas que te lleva programar los formularios para que el usuario no haga lo que no debe (como enviar los datos in antes haber llenado todo, o que presione un botón antes de que los datos terminen de cargarse, por ejemplo).

Respecto al euro, lo que yo haría en tu caso sería tener una tabla de monedas cuya PK pondría en la tabla donde los precios aparecen para que especifique el tipo de moneda usado en ese mismo precio. No lo pondría como símbolo, ya que los lenguajes de programación suelen tener cómo resolver eso, sino como ID numérico. A mi entender sería más simple.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 14/01/2011, 06:34
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: ayuda con decimal,float, o double i los euros 600.000 o 1.000.000

por lo que entiendo
tendría que hacer el formulario
html + css +php

1casilla . 2casilla . 3casilla
1 000 000

o que entre el valor total
1000000

que es mejor la de arriba pero lleva mas trabajo a la hora de validar
que rellene de derecha a izquierda
la 2 casilla y la 3 casilla serán obligatorias

en referencia a los pisos y los euros

o la segunda opción

lo digo porque a la hora de entrar tantos números te dejas números siempre y con los puntos es mas fácil

podrías hacer un update pero al usuari final cuando mas fácil mejor

con respeto con la validación lo hacéis con php o javascript o ajax
ya se que php i mysql lo interpreta el servidor
y ajax y javascript el cliente
si tienen desactivado javascript
en firefox,opera,chrome,safari viene activado pero con explorer me parece que no

de javascript no se nada y php y mysql un poco y html css bastante

después pongo los puntos con una función de php cuando extraiga la información
de mysql y que lo vea el usuario final con los puntos

con respeto a l'euro me decís que haga otra tabla lo decís porque no haya redundancia
de datos no porque es un valor que siempre va a salir a todos los edificios y no varia €
id_mondea 1
nombre_moneda euro
símbolo_moneda €

1:N

si hago metros cuadrados tanto valor como símbolo hago otra tabla 1:N

cuando haces una select es inmensa
había leído que cuando hay redundancia de datos siempre se tiene que crear otra tabla
id_metros2
numero_metros2 100
símbolo_metros m²
  #5 (permalink)  
Antiguo 14/01/2011, 07:08
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: ayuda con decimal,float, o double i los euros 600.000 o 1.000.000

- No dejes espacios entre grupo de números. Te dará un error de conversión, porque el espacio es un caracter.
- Respecto a las validaciones en formulario, eso no es tema d este foro. POstealo en el de Ajax, PHO, CSS o Javascript. Allí te darán las soluciones.
- El uso de una tabla independiente para las monedas le aporta flexibilidad al sistema, porque permite que no sólo trabaje en euros, sino que se pueda manejar de una forma dinámica las conversiones de precios según la localización de usuario que la ve.
- Decir que no variará el tipo de moneda es como no conocer la Web. ¿Crees que todos entienden el valor del Euro? ¿No has pensado que esa página va a ser vista en otros países, donde el euro no es la moneda corriente, ni la de referencia? Sin ir más lejos, en Argentina la mayoría de la gente te habla de conversiones en dólares antes que en Euros.
- Para hablar de una consulta compleja, estaríamos hablando de muuuuchas tablas, o muuuchas condiciones... Un JOIN para recuperar el tipo de moneda es una consulta menor dentro del contexto.

Fuera de eso, el resto que dices no lo entiendo bien porque el texto está algo disperso, fragmentado. Trata de expresar la idea más claramente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: double, euros
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 01:01.