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.175
13
38
45
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
43
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
F access ricerca record con apostrofo. MS Access 0
F Cerco Hosting con VECCHIE versioni di php Hosting 0
C Come ricreare questo calcolatore di prezzi a step con woocommerce? WordPress 0
C Segnalo barra laterale di navigazione ASSENTE con Chrome Comunicazioni dallo Staff 5
G Guadagna dalla Vendita di Articoli Sponsorizzati con GuestPostMax.com! Guadagnare col Sito 0
P Hosting multidominio con Plesk Hosting 0
L Soluzione con INNER JOIN Database 0
S passare un valore da un form a un file .php con metodo post PHP 4
A Redirect 301 genera url statico con variabili Web Server 0
T problemi con dati menu a tendina HTML e CSS 2
T Query con date MS Access 1
F Url dinamiche da cambiare con categoria, subcategoria e title PHP 2
L Aiuto con DataGridView Visual Basic 1
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
G Problema con Xampp Web Server 1
M Aggiunta prodotti nel carrello con lo stesso in e varianti diverse PHP 0
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
B Non riesco a trovare i cognomi con i caratteri speciali in Access (Microsoft 365) MS Access 0
N Problema con position absolute e overflow HTML e CSS 4
M Estrarre soltanto i prodotti con stessa descrizione PHP 10
felino [Wordpress] Gallery con foto selezionabili dall'utente WordPress 0
G Invio di più valori con la stessa checkbox PHP 4
csi Inviare file jpg in locale alla stampante con php PHP 0
otto9due Proteggere una cartella e file con password tramite .htaccess e .htpasswd Web Server 0
I Form con selettore HTML e CSS 0
G phpmailer e php 8.1 con estensione mysqli PHP 6
L Problema con inner join PHP 11

Discussioni simili