• 7 odgovora
  • 3.260 pregleda
For petlja i vrednost ciklusne promenjive 12.11.2008. u 09:12 · pre 218 meseci #1
Pravim star rating skriptu u PHP-u. U pitanju je funkcija koja prima ocenu od 0 do 5 i na osnovu prosleđenog parametra vraća zvezdice.
Slika:

Imam sledeći problem! Kada prosledim ručno kao parametar funkciji npr. broj 3.0 dobijem sliku sa tri zvezdice(što i treba):
Code:

$i = 3.0;
echo $i . " " . starRate($i) . "<br/>";

ali u for petlji, kada ciklusna promenjiva $i dođe do 3, dobijam tri i pola zvezdice:
Code:

for($i=0;$i<=5;$i+=0.2)
{
    echo $i . " " . starRate($i) . "<br/>";
}


Zašto se ovo dešava i zašto je poslednja vrednost $i u okviru for petlje 4.8 kad treba 5?

Ceo kod:
Code:

<?php
/*
FUNKCIJA KOJA NA OSNOVU PROSLEDJENE OCENE(FLOAT NUMBER) OD 0 DO 5 
GENERISE ZVEZDICE(GIF SLIKA)
*/
function starRate($parRating)
{    
    $imagesPath = "./star_rating_img"; // folder gde se nalaze slike
    
    
    if($parRating <= 0)
    {
        $rateStars = "$imagesPath/00star.gif";
    }
    elseif ($parRating <= 0.5)
    {
        $rateStars = "$imagesPath/05star.gif";
    }
    elseif ($parRating <= 1)
    {
        $rateStars = "$imagesPath/1star.gif";
    }
    elseif ($parRating <= 1.5)
    {
        $rateStars = "$imagesPath/15star.gif";
    }
    elseif ($parRating <= 2)
    {
        $rateStars = "$imagesPath/2star.gif";
    }
    elseif ($parRating <= 2.5)
    {
        $rateStars = "$imagesPath/25star.gif";
    }
    elseif ($parRating <= 3)
    {
        $rateStars = "$imagesPath/3star.gif";
    }
    elseif ($parRating <= 3.5)
    {
        $rateStars = "$imagesPath/35star.gif";
    }
    elseif ($parRating <= 4)
    {
        $rateStars = "$imagesPath/4star.gif";
    }
    elseif ($parRating <= 4.5)
    {
        $rateStars = "$imagesPath/45star.gif";
    }
    elseif ($parRating <= 5)
    {
        $rateStars = "$imagesPath/5star.gif";
    }
    
    return "<img src=\"$rateStars\" alt=\"ocena\"/>"; // pocratni rezultat je <img> tag
}

echo "<div style=\"float:left; padding-right: 70px\">";
echo "<h2>FOR PETLJA:</h2>";
for($i=0;$i<=5;$i+=0.2)
{
    echo $i . " " . starRate($i) . "<br/>";
}
echo "</div>";

echo "<div style=\"float:left;\">";
echo "<h2>RUCNO:</h2>";
$i = 3.0;
echo $i . " " . starRate($i) . "<br/>";
$i = 3.1;
echo $i . " " . starRate($i) . "<br/>";
echo "</div>";
?>
Re: For petlja i vrednost ciklusne promenjive 12.11.2008. u 10:47 · pre 218 meseci #3
Pretpostavljam zbog rada s decimalnim brojevima jer usled zaokruživanja ume da dođe do dakvih grešaka, pa dobiješ 3,000001.

Odradi for petlju ovako:
for($x=0; $x<=50; $x+=2) ....

pa se svugde drži celih broijeva, i koriguj onaj niz "if"-ova (koji je dušu da za "switch")
Potpis
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
Re: For petlja i vrednost ciklusne promenjive 12.11.2008. u 18:28 · pre 218 meseci #5
Citat:
Nemanja Avramović:
Samo nagađam, ali možda i proradi


Na žalost ništa.

Ovde mi totalno nije jasno šta se dešava! Kada funkciji starRate($parRating) kao argument prosledim bilo koji broj(decimal, integer) radi normalno, kada istu funkciju propustim kroz for petlju gde je korak ceo broj ili 0.5 opet radi, ali kada je korak ciklusne promenjive ispod 0.5 onda dobijam neočekivane rezultate. I nije mi jasno zašto for petlja iz prve poruke ide do 4.8, kada je uslov $i<=5 ?!
Re: For petlja i vrednost ciklusne promenjive 12.11.2008. u 18:41 · pre 218 meseci #6
E sad sam se tek našao zbunjen!
Kod:
Code:

<?php
$i = 0;
while($i <= 5.0)
{
    $i+=0.2;
    echo "$i ";
    if($i == 3) echo "JE JEDNAKO SA 3 <br/>"; else echo "NIJE JEDNAKO SA 3 <br/>";    
}

echo "<hr/>";

$i = 0;
while($i <= 5.0)
{
    $i+=0.5;
    echo "$i ";
    if($i == 3) echo "JE JEDNAKO SA 3 <br/>"; else echo "NIJE JEDNAKO SA 3 <br/>";    
}
?>


Izlaz:
0.2 NIJE JEDNAKO SA 3
0.4 NIJE JEDNAKO SA 3
0.6 NIJE JEDNAKO SA 3
0.8 NIJE JEDNAKO SA 3
1 NIJE JEDNAKO SA 3
1.2 NIJE JEDNAKO SA 3
1.4 NIJE JEDNAKO SA 3
1.6 NIJE JEDNAKO SA 3
1.8 NIJE JEDNAKO SA 3
2 NIJE JEDNAKO SA 3
2.2 NIJE JEDNAKO SA 3
2.4 NIJE JEDNAKO SA 3
2.6 NIJE JEDNAKO SA 3
2.8 NIJE JEDNAKO SA 3
3 NIJE JEDNAKO SA 3
3.2 NIJE JEDNAKO SA 3
3.4 NIJE JEDNAKO SA 3
3.6 NIJE JEDNAKO SA 3
3.8 NIJE JEDNAKO SA 3
4 NIJE JEDNAKO SA 3
4.2 NIJE JEDNAKO SA 3
4.4 NIJE JEDNAKO SA 3
4.6 NIJE JEDNAKO SA 3
4.8 NIJE JEDNAKO SA 3
5 NIJE JEDNAKO SA 3
-------------------------------------------------------------------------------
0.5 NIJE JEDNAKO SA 3
1 NIJE JEDNAKO SA 3
1.5 NIJE JEDNAKO SA 3
2 NIJE JEDNAKO SA 3
2.5 NIJE JEDNAKO SA 3
3 JE JEDNAKO SA 3
3.5 NIJE JEDNAKO SA 3
4 NIJE JEDNAKO SA 3
4.5 NIJE JEDNAKO SA 3
5 NIJE JEDNAKO SA 3
5.5 NIJE JEDNAKO SA 3


Re: For petlja i vrednost ciklusne promenjive 12.11.2008. u 20:17 · pre 218 meseci #8
Citat:
beep: http://us.php.net/float ... obrati paznju na tekst u crvenom polju

Hvala! Sad mi je jasno!

Citat:
beep: inace to sto radis se resava bez petlje

Inače petlja mi nije ni trebala, već sam samo hteo preko nje da testiram rating sistem, koji inače radi.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme