bug con switch su float

barbarina

Nuovo Utente
26 Mar 2008
2
0
0
Ciao a tutti,
ho un problema singolare,

ho un case su numeri float e nel caso in cui passo 0, nonostante la condizione del case e' FALSE, ci entra ed esegue la porzione errata, qualcuno sa dirmi perche'?



$valoreGiornaliero=(1 - 22/22); //QUINDI 0
$valoreGiornaliero=round($valoreGiornaliero*100,2);//ancora 0
$target=0.80;
$sogliaMinima=1.00;
$sogliaMassima=1.50;

switch($valoreGiornaliero){

case ($valoreGiornaliero<=$target):$colore="33FF00";//verde
break;

case ((($valoreGiornaliero>$target) and ($valoreGiornaliero <=
$sogliaMinima))):
$colore="FFFF00";//giallo
break;

case ($valoreGiornaliero>$sogliaMinima):
$colore="FF0000";//rosso
break;

default: $colore="003399";
break;

} // switch


funziona con qualsiasi valore tranne che con 0!!!! se passo 0 mi dice GIALLO!!!
Aiutatemi vi prego:eek:
 

barbarina

Nuovo Utente
26 Mar 2008
2
0
0
soluzione al bug

Ciao,
con il controllo sul valore se è pari a 0 va bene ma non riesco a capire il perche'. Il bello è che se eseguo un var_dump sulle condizioni dello switch esce che la condizione in cui 0<0.80 e' true ma salta e va al passo successivo dove la condizione risulta FALSE (e il var_dump lo conferma)ma esegue lo stesso la porzione di codice (provare per credere). Temo sia un bel bug di php!!! :incazz:
Ad ogni modo ci ho messo "una pezza" e funziona, solo che sono in pensiero su altre possibili anomalie :confused:

Grazie mille per l'aiuto.

Ciao Ciao:D
 

lukeonweb

Utente Attivo
5 Mar 2003
5.177
10
38
43
Napoli
www.lucaruggiero.it
Conosco ancora troppo poco il PHP (W ASP) per poter dire che si tratta di un'eccezione nativa o di chissà cosa.

L'importante è che funzioni: non consuma memoria, è semplice e veloce!

Man mano che approfondirai la tua conoscenza del PHP, magari, ti renderai conto di come gestire quell'eccezione (se di eccezione si tratta) e potrai affinare lo script.

Ciao :)
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
41
Sanremo
Non è assolutamente un'anomalia, ma è solo il risultato di un uso improprio dello switch. Lo switch non è pensato per usare delle condizioni nei case, ma per effettuare un matching tra quello che c'è nello switch e quello che c'è nei vari case. Se un case coincide con lo switch, il relativo codice viene eseguito. Non riesco a spiegarmi bene, ma vedo di tradurre il tuo switch nell'equivalente con if:

PHP:
if ( $valoreGiornaliero == ($valoreGiornaliero<=$target)
{
	$colore="33FF00"; //verde
}
else if ( $valoreGiornaliero == ((($valoreGiornaliero>$target) and ($valoreGiornaliero <=$sogliaMinima)))
{
	$colore="FFFF00"; //giallo
}
else if ( $valoreGiornaliero == ($valoreGiornaliero>$sogliaMinima)
{
	$colore="FF0000";//rosso
{
else
{
	$colore="003399";
}

nel caso in cui $valoreGiornaliero è "0" diventa così:

// 0<=$target è VERO quindi il suo risultato sarà TRUE, ma TRUE vale 1 e quindi nel complesso viene 0 == 1 che è falsa e quindi non entra
if ( 0 == (0<=$target)
{
	$colore="33FF00"; //verde
}
// 0>$target è FALSO, 0<=$sogliaMinima è FALSO quindi danno FALSE, ma FALSE vale 0 quindi nel complesso 0 == 0 è vero quindi entra qui dentro!!!!
else if ( 0 == (((0>$target) and (0 <=$sogliaMinima)))
{
	$colore="FFFF00"; //giallo
}
else if ( 0 == (0>$sogliaMinima)
{
	$colore="FF0000";//rosso
{
else
{
	$colore="003399";
}

Non so se sono riuscito a spiegarmi, ma la sostanza è che è sbagliato usare lo switch...case in quel modo.
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
I "bug di php" sono un pò come i virus per i Pc, quando qualcosa non funziona è sempre colpa loro :D
 
Discussioni simili
Autore Titolo Forum Risposte Data
felino Bug estetici del nuovo layout Supporto Mr.Webmaster 1
S Scoperto Bug Pinterest Discussioni Varie 0
C 3 Bug CSS AND HTML: Overlay-Banner-Menu HTML e CSS 0
C 3 BUG CSS AND HTML: OVERLAY - BANNER- MENU HTML e CSS 0
F Woocommerce bug? WordPress 0
P Bug visualizzazione tastiera alla pressione del tastio Vai(dispositivi mobili) Javascript 0
filippino Bug WordPress: sito usato per phising WordPress 1
P Bug IE 7/8 slideshow inserito in pagina html5 Parallax HTML e CSS 4
P Bug IE 7 slideshow inserito in pagina html5 Parallax Javascript 1
darkjoker Sessione di bug hunting Sicurezza e Virus 1
X PageRank Bug PHP 22
max_400 php i bug permetto agli haker di entrare negli spazi web? PHP 7
T bug vista+explorer7 Javascript 1
C installazione e bug fix script php PHP 2
L Attacco al server o Bug? Aiutatemi!! PHP 5
W risolvere un bug PHP 4
M bug ie - doubled margin? HTML e CSS 0
D Firefox bug Supporto Mr.Webmaster 6
Filippine bug di sicurezza su mozilla e firefox Discussioni Varie 0
peppoweb I bug di Office Sicurezza e Virus 0
peppoweb Un bug blocca a distanza il log di Apache HTTP Server Sicurezza e Virus 0
peppoweb Bug nella registrazione di Office 2000 Windows e Software 0
M Conteggio con group by PHP 3
M Problema con Try Catch PHP 0
K Aiuto con file audio in html HTML e CSS 1
M Upload immagine con javascript problemi con FormData() Javascript 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
G Invio form con PHP PHP 3
M Barra di navigazione con google HTML e CSS 1
T PROBLEMA CON SESSIONI PHP 3
A Problemi con move_uploaded_file PHP 7
G Menù a tendina di ricerca con query PHP 1
T fatture con voci fattura in php PHP 0
A Tabella con bottoni per aggiornamento record PHP 6
M Come selezionare e deselezionare radiobutton con jquery jQuery 1
MarcoGrazia Calcolo fra due date con esclusione delle feste PHP 7
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
M Inviare un file su un server remoto con JavaScript Javascript 0
L problema con query select PHP 2
M Come validare textarea con jquery jQuery 0
M Problemi con la stampa dei valori in php PHP 1
A Regex per isolare link interni con rel noopener PHP 0
L Problemi con il login PHP 2
F Creare elementi html con javascript Javascript 4

Discussioni simili