Foros del Web » Programando para Internet » PHP »

Problema con "switch"

Estas en el tema de Problema con "switch" en el foro de PHP en Foros del Web. Tengo este problema, que al parecer el switch no está trabajando bien al buscar valores con decimales... El código es este... Código PHP: <?php $precio ...
  #1 (permalink)  
Antiguo 22/06/2009, 14:22
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 21 años, 7 meses
Puntos: 34
Problema con "switch"

Tengo este problema, que al parecer el switch no está trabajando bien al buscar valores con decimales...

El código es este...

Código PHP:
<?php

$precio
=1.50;
$precioideal=1.20;


$dif=$precio-$precioideal;

echo 
$dif."<br>";

if (
$dif>0) {//** Si vende más caro **//

switch ($dif){
case 
0.1:$bonoprecio 90; break;
case 
0.2:$bonoprecio 80; break;
case 
0.3:$bonoprecio 70; break;
case 
0.4:$bonoprecio 60; break;
case 
0.5:$bonoprecio 50; break;
}
}
else {}

echo 
$bonoprecio;

?>
Si por ejemplo, lo dejo de la siguiente forma funciona, pero no es lo que necesito...

Código PHP:
<?php

$precio
=150;
$precioideal=120;


$dif=$precio-$precioideal;

echo 
$dif."<br>";

if (
$dif>0) {//** Si vende más caro **//

switch ($dif){
case 
10:$bonoprecio 90; break;
case 
20:$bonoprecio 80; break;
case 
30:$bonoprecio 70; break;
case 
40:$bonoprecio 60; break;
case 
50:$bonoprecio 50; break;
}
}
else {}

echo 
$bonoprecio;

?>
PD: Hay alguna forma de que case funcionce como " case > 1 " es decir que si el mayor que uno tome X valor
__________________
elGastronomo
  #2 (permalink)  
Antiguo 22/06/2009, 14:29
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Problema con "switch"

Trata convirtiendolos a string

Ejemplo
Código PHP:
case "0.1":$bonoprecio 90; break; 
case 
"0.2":$bonoprecio 80; break; 
case 
"0.3":$bonoprecio 70; break; 
case 
"0.4":$bonoprecio 60; break; 
case 
"0.5":$bonoprecio 50; break; 
Me dejas saber
  #3 (permalink)  
Antiguo 22/06/2009, 14:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problema con "switch"

claro, o bien... recorta la fracción

Código PHP:
$foo 1.234;
$foo substr($foo03);

echo 
$foo// 1.2
echo (float) $foo// ??? 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 22/06/2009, 14:35
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 21 años, 7 meses
Puntos: 34
Respuesta: Problema con "switch"

Cita:
Iniciado por abimaelrc Ver Mensaje
Trata convirtiendolos a string

Ejemplo
Código PHP:
case "0.1":$bonoprecio 90; break; 
case 
"0.2":$bonoprecio 80; break; 
case 
"0.3":$bonoprecio 70; break; 
case 
"0.4":$bonoprecio 60; break; 
case 
"0.5":$bonoprecio 50; break; 
Me dejas saber
Si, se me había ocurrido, y lo probé pero no, y buscando pensando que podría ser eso de como ve PHP al valor 0.3 que daba como resultado ese ejemplo, ahora probé con esto y funcionó...

agregué esto...

setType($dif,"string");

Lo que no se si se puede case mayor a 1 o si lo que debo hacer es que entre al switch solo si esta entre 0 y 1 y que si es mayor que 1 haga lo que yo le diga...

¿Se entiende?
__________________
elGastronomo
  #5 (permalink)  
Antiguo 22/06/2009, 14:43
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: Problema con "switch"

Solucion
Código PHP:
<?php 

$precio
=1.50
$precioideal=1.20


$dif= ($precio-$precioideal); 

if (
$dif 0) {//** Si vende más caro **// 

switch ((string)$dif){ 
case 
0.1:$bonoprecio 90; break; 
case 
0.2:$bonoprecio 80; break; 
case 
0.3:$bonoprecio 70; break; 
case 
0.4:$bonoprecio 60; break; 
case 
0.5:$bonoprecio 50; break; 


else{}

echo 
$bonoprecio

?>

Última edición por gjx2; 22/06/2009 a las 14:59
  #6 (permalink)  
Antiguo 22/06/2009, 14:58
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: Problema con "switch"

Cita:
Iniciado por gjx2 Ver Mensaje
Solucion
<?php

$precio=1.50;
$precioideal=1.20;


$dif= ($precio-$precioideal);

if ($dif > 0) {//** Si vende más caro **//

switch ((string)$dif){
case 0.1:$bonoprecio = 90; break;
case 0.2:$bonoprecio = 80; break;
case 0.3:$bonoprecio = 70; break;
case 0.4:$bonoprecio = 60; break;
case 0.5:$bonoprecio = 50; break;
}
}
else{}

echo $bonoprecio;

?>
  #7 (permalink)  
Antiguo 22/06/2009, 15:06
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 21 años, 7 meses
Puntos: 34
Respuesta: Problema con "switch"

Cita:
Iniciado por gjx2 Ver Mensaje
Sep excelente, menos código y funciona perfecto... Gracias a todos...

*****

¿Alguna idea de como hacer lo de...?

case > 1
__________________
elGastronomo
  #8 (permalink)  
Antiguo 22/06/2009, 15:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Problema con "switch"

case ($dir>1):
echo "mayor a 1";
break;
  #9 (permalink)  
Antiguo 22/06/2009, 15:18
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 21 años, 7 meses
Puntos: 34
Respuesta: Problema con "switch"

Cita:
Iniciado por abimaelrc Ver Mensaje
case ($dir>1):
echo "mayor a 1";
break;
Excelente :)

Pensé que ya lo había probado, menos mal que me lo pasaste, si era como yo imaginaba, se ve que me olvidé de probarlo...

Muchas gracias, con eso me evito tantos if y elseif
__________________
elGastronomo
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 21:37.