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

Problema con decimales a la hora de buscar y comparar

Estas en el tema de Problema con decimales a la hora de buscar y comparar en el foro de Mysql en Foros del Web. Saludos a todos, gracias de antemano por leer mi mensaje y aportar cualquier ayuda. Mi problema es que si uso la siguiente consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 26/11/2012, 17:39
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Pregunta Problema con decimales a la hora de buscar y comparar

Saludos a todos, gracias de antemano por leer mi mensaje y aportar cualquier ayuda. Mi problema es que si uso la siguiente consulta:

Código SQL:
Ver original
  1. SELECT precios_empresa_envio.precio_final
  2. FROM precios_empresa_envio
  3. WHERE precios_empresa_envio.idempresa_envio != 2
  4. AND precios_empresa_envio.rango_desde <= 9
  5. AND precios_empresa_envio.rango_hasta >= 9

Todo esta bien en orden pero cuando en algun momento le paso algo asi

Código SQL:
Ver original
  1. SELECT precios_empresa_envio.precio_final
  2. FROM precios_empresa_envio
  3. WHERE precios_empresa_envio.idempresa_envio != 2
  4. AND precios_empresa_envio.rango_desde <= 9.45
  5. AND precios_empresa_envio.rango_hasta >= 9.45

sencillamente no me retorna nada.

Lo que estoy haciendo es buscando el precio que este en el rango de ese
PESO ya que los numeros son en base a un PESO y tiene una tarifa plana la cual debo seleccionar
para hacer otros calculos posteriores.

Espero que puedan ayudarme,

Gracias.
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.

Última edición por gnzsoloyo; 26/11/2012 a las 18:44 Razón: Código SQL sin etiquetar.
  #2 (permalink)  
Antiguo 26/11/2012, 18:44
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: Problema con decimales a la hora de buscar y comparar

Perdón, pero ambas consultas son iguales...
En esencia, lo que sucede es que no existe ningún registro que cumpla esas tres condiciones al mismo tiempo.
¿Eso lo tienes claro?
__________________
¿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 26/11/2012, 18:51
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Respuesta: Problema con decimales a la hora de buscar y comparar

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Perdón, pero ambas consultas son iguales...
En esencia, lo que sucede es que no existe ningún registro que cumpla esas tres condiciones al mismo tiempo.
¿Eso lo tienes claro?
usando el 9 me retorna correctamente 110 el cual es el valor exacto de la lista de rangos.

el asunto es que 9.45 esta entre 1 y 10 y no entiendo porque no lo retorna el precio para ello.
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #4 (permalink)  
Antiguo 26/11/2012, 18:53
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Respuesta: Problema con decimales a la hora de buscar y comparar



  1. SELECT precios_empresa_envio.precio_final
  2. FROM precios_empresa_envio
  3. WHERE precios_empresa_envio.idempresa_envio != 2
  4. AND precios_empresa_envio.rango_desde <= 9.45
  5. AND precios_empresa_envio.rango_hasta >= 9.45
Deberia Retornar 175 porque 9.45 esta entre 10 y 14




Como veras en la lista podras entender mejor a lo que me refiero
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #5 (permalink)  
Antiguo 26/11/2012, 19:03
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: Problema con decimales a la hora de buscar y comparar

Craso error....
9.45 no está entre 10 y 14, porque estás trabajando con ENTEROS, por lo que un número decimal es redondeado para ser usado en contexto de enteros. Eso es lo que se hace para hacer que las operaciones sean consistentes.

Ahora bien, el entero más cercano a 9,45 es 9, no 10, por lo que el rango leído es todo lo que sea igual o menor a 9.
Entonces, si el registro debe ser tal que rango_desde sea igual o menor a 9, y rango_hasta igual o mayor a 9, sólo hay un registro que lo cumple: El tercero, cuyo precio final es 130...

Diferente hubiera sido si el valor buscado fuese igual o mayor a 9,55, porque en ese caso hubiese sido convertido por redondeo a 10.

Ten en cuenta que las reglas de redondeo son las mismas usadas en matemáticas. Las mismas.
Si le dices a un profesor de matemática que 9,45 se redondea a 10, repruebas la materia sin más trámite.

¿Se entiende la lógica?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 26/11/2012, 19:07
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Respuesta: Problema con decimales a la hora de buscar y comparar

estoy utilizando round($peso) antes de enviarla al SQL asi si me funciona. ya que lo estaria convirtiendo en un ENTERO. De igual forma gracias.
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #7 (permalink)  
Antiguo 26/11/2012, 19:32
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: Problema con decimales a la hora de buscar y comparar

Como quieras, pero te recuerdo que round() en programación y ROUND() en SQL usan la misma lógica matemática, por lo que el resultado seguiría siendo 9, y no 10.

Por si no me crees:
Código MySQL:
Ver original
  1. mysql> SELECT ROUND(9.45) REDONDEO_1, ROUND(9.55) REDONDEO_2;
  2. +------------+------------+
  3. | REDONDEO_1 | REDONDEO_2 |
  4. +------------+------------+
  5. |          9 |         10 |
  6. +------------+------------+
  7. 1 row in set (0.00 sec)

En cuanto al uso de round() en PHP, puedes ver en el manual oficial (http://php.net/manual/es/function.round.php), y verás que dice exactamente lo mismo.

Ahora, si tu crees que me equivoco, o que el manual oficial se equivoca, no hay mucho espacio por donde ayudarte.
__________________
¿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: select
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:03.