Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472

    Comportamento che non capisco utilizzando array bidimensionale

    Semplifico con un esempio.

    Ho una tabella chiamata "favorito" con 3 campi: quota / arrivo / diff (dove "quota" e "diff" sono float) così popolato:
    2.01 / 4 / 1.11
    1.99 / 2 / 1.03
    3.02 / 3 / 0.31
    4.92 /1 / 0.78
    3.75 / 1 / 0.29
    1.46 / 1 / 3.18
    1.95 /4 / 0.84

    Questo è il codice
    codice:
    <?php
    //connessione al db
     $query = "SELECT quota,arrivo,diff FROM favorito ";
                 $result = (mysql_query($query, $db));
                 while ($dati = mysql_fetch_array($result))
                  {    
                         $quota = $dati['quota'];
                         $arrivo = $dati['arrivo'];
                         $diff = $dati['diff'];
                         
                         
                       
                                                $indice=$diff*100;
                                                $conta[$indice][$arrivo]=$conta[$indice][$arrivo]+1;  
                                                if ($arrivo==1) { $conta[$indice][5]=$conta[$indice][5]+$quota;}
                                               
                                                
                                              
         
                    }
     ?><table width="90%" border="1" cellspacing="1" cellpadding="2"  bgcolor="#ecf2f6" align="center">
                                                                                          <tr><th><font size="4">VISUALIZZAZIONE PER DIFFERENZA DI QUOTA</font></th></tr>
                                                                                          
                                                                                          <table width="90%" border="1" cellspacing="1" cellpadding="2"  bgcolor="#f0fff0" align="center">
                                                                                          <thead>
                                                                                          <tr><th width="32%"><h3>diff. quota</h3></th>
                                                                                                 <th width="34%"><h3>vittorie</h3></th>
                                                                                                 <th width="34%"><h3>corse disputate</h3></th> 
                                                                                                 
                                                                                            </tr></thead><tbody>
                                                                                      
                                                     <?php  
                                                     //qua serve il for per stampare le righe
                                                    for ($i=0; $i<=5000; $i++)
                                                    {    
                                                         //occore vedere che la singola riga abbia almeno una corsa
                                                         $cd=$conta[$i][1]+$conta[$i][2]+$conta[$i][3]+$conta[$i][4];
                                                        
                                                         $conta[$i][6]=substr($conta[$i][6],0,-1);
                                                         if ($cd>0) { ?> 
                                                                                     
                                                                                    <tr><td><center><?php echo number_format($i/100,2,'.',''); ?></center></td>
                                                                                    <td><center><?php echo $conta[$i][1]; ?></center></td>
                                                                                    <td><center><?php echo $cd; ?></center></td>
                                                                                    
                                                                                   </tr><?php 
                                                                            }     
                                                      } 
                                                  
                                        echo ("</tbody></table>
    
    
    </p>");
    In pratica deve fornire poi un ordine per differenza ed essendo variabili con 2 decimali dopo la virgola ho pensato di moltiplicarlo per 100 così da avere un array che poi diventa bidimensionale perché ciascun "arrivo" può assumere valori 1, 2, 3 o 4.

    I valori delle "diff" sono
    1.11
    1.03
    0.31
    0.78
    0.29
    3.18
    0.84
    ma quando viene visualizzata la tabella esce così
    0.28 1 1
    0.31 1
    0.78 1 1
    0.84 1
    1.03 1
    1.11 1
    3.18 1 1
    In pratica lo 0.29 mi diventa 0.28.

    Perché??????

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    Ho provato anche a togliere di mezzo il database e ad inizializzare a 0 l'array ma il risultato è lo stesso.

    Basta copiare e incollare il codice
    codice:
    <?php
    for ($i=1; $i<=400; $i++)
    { for ($j=0; $j<=5;$j++)
    { $conta[$i][$j]=0;
    }
    }
    
     for ($i=1; $i<=7; $i++)
    {    if ($i==1) { $quota=2.01; $arrivo=4; $diff=1.11;}
         if ($i==2) { $quota=1.99; $arrivo=2; $diff=1.03;}
         if ($i==3) { $quota=3.02; $arrivo=3; $diff=0.31;}     
         if ($i==4) { $quota=4.92; $arrivo=1; $diff=0.78;}
         if ($i==5) { $quota=3.75; $arrivo=1; $diff=0.29;}        
          if ($i==6) { $quota=1.46; $arrivo=1; $diff=3.18;}
         if ($i==7) { $quota=1.95; $arrivo=4; $diff=0.84;}          
                       
                                                $indice=$diff*100;
                                                $conta[$indice][$arrivo]=$conta[$indice][$arrivo]+1;  
                                                if ($arrivo==1) { $conta[$indice][5]=$conta[$indice][5]+$quota;}
                                               
                                                
                                              
         
                    }
     ?><table width="90%" border="1" cellspacing="1" cellpadding="2"  bgcolor="#ecf2f6" align="center">
                                                                                          <tr><th><font size="4">VISUALIZZAZIONE PER DIFFERENZA DI QUOTA</font></th></tr>
                                                                                          
                                                                                          <table width="90%" border="1" cellspacing="1" cellpadding="2"  bgcolor="#f0fff0" align="center">
                                                                                          <thead>
                                                                                          <tr><th width="32%"><h3>diff. quota</h3></th>
                                                                                                 <th width="34%"><h3>vittorie</h3></th>
                                                                                                 <th width="34%"><h3>corse disputate</h3></th> 
                                                                                                 
                                                                                            </tr></thead><tbody>
                                                                                      
                                                     <?php  
                                                     //qua serve il for per stampare le righe
                                                    for ($i=0; $i<=5000; $i++)
                                                    {    
                                                         //occore vedere che la singola riga abbia almeno una corsa
                                                         $cd=$conta[$i][1]+$conta[$i][2]+$conta[$i][3]+$conta[$i][4];
                                                        
                                                         $conta[$i][6]=substr($conta[$i][6],0,-1);
                                                         if ($cd>0) { ?> 
                                                                                     
                                                                                    <tr><td><center><?php echo number_format($i/100,2,'.',''); ?></center></td>
                                                                                    <td><center><?php echo $conta[$i][1]; ?></center></td>
                                                                                    <td><center><?php echo $cd; ?></center></td>
                                                                                    
                                                                                   </tr><?php 
                                                                            }     
                                                      } 
                                                  
                                        echo ("</tbody></table>
    
    
    </p>");
    Vedete la riga
    if ($i==5) { $quota=3.75; $arrivo=1; $diff=0.29;}

    quando poi arriva a stampare la tabella la differenza si trasforma magicamente in 28.

    Mi risolvete 'sta magia per favore?

    P.S. Nel codice ci sono delle righe che nell'esempio risultano di troppo...comunque...ok il senso è quello...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    Ho visto che è una questione di arrotondamento.

    Infatti 0.29 dà 0.28
    0.57 dà 0.56
    1.13 dà 1.12
    1.14 dà 1.13

    Basta correggere e scrivere 0.29001 che tutto si aggiusta ma rimane comunque l'interrogativo. Perché?

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    Provate ad eseguire questo semplice codice.

    codice:
    <?php
    for ($i=0;$i<1.50;$i=$i+0.01)
    { $a[$i*100]=$a[$i*100]+$i*100;
    }
    for ($i=0;$i<150;$i++)
    { echo ("i è " . $i . " e a è " . $a[$i] . "
    ");
    }
    ?>
    Non è strano quello che succede?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.